kritzel-stencil 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.cjs.js +1 -1
- package/dist/cjs/kritzel-active-users_42.cjs.entry.js +99 -15
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/stencil.cjs.js +1 -1
- package/dist/cjs/{workspace.migrations-CPncKohl.js → workspace.migrations-TAWnOE7r.js} +49 -2
- package/dist/collection/classes/core/viewport.class.js +3 -0
- package/dist/collection/classes/handlers/key.handler.js +73 -6
- package/dist/collection/classes/objects/shape.class.js +24 -0
- package/dist/collection/classes/objects/text.class.js +23 -0
- package/dist/collection/classes/tools/text-tool.class.js +2 -2
- package/dist/collection/components/core/kritzel-editor/kritzel-editor.js +28 -7
- package/dist/collection/components/core/kritzel-engine/kritzel-engine.js +30 -1
- package/dist/collection/constants/version.js +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/kritzel-controls.js +1 -1
- package/dist/components/kritzel-editor.js +1 -1
- package/dist/components/kritzel-engine.js +1 -1
- package/dist/components/kritzel-settings.js +1 -1
- package/dist/components/kritzel-tool-config.js +1 -1
- package/dist/components/{p-BHSRRiEg.js → p--T9W9erA.js} +1 -1
- package/dist/components/{p-CaDBSaxZ.js → p-B4wyWc66.js} +2 -2
- package/dist/components/{p-C_yfHS4F.js → p-CVQBfO3r.js} +1 -1
- package/dist/components/{p-B_rHzy0t.js → p-DoIOS3fS.js} +1 -1
- package/dist/components/{p-9ASFIqd0.js → p-mDz63oKF.js} +1 -1
- package/dist/esm/index.js +2 -2
- package/dist/esm/kritzel-active-users_42.entry.js +99 -15
- package/dist/esm/loader.js +1 -1
- package/dist/esm/stencil.js +1 -1
- package/dist/esm/{workspace.migrations-ytjzXm9B.js → workspace.migrations-Dta1Yewh.js} +49 -2
- package/dist/stencil/index.esm.js +1 -1
- package/dist/stencil/p-22753671.entry.js +9 -0
- package/dist/stencil/p-Dta1Yewh.js +1 -0
- package/dist/stencil/stencil.esm.js +1 -1
- package/dist/types/classes/objects/shape.class.d.ts +10 -0
- package/dist/types/classes/objects/text.class.d.ts +9 -0
- package/dist/types/components/core/kritzel-editor/kritzel-editor.d.ts +1 -0
- package/dist/types/components/core/kritzel-engine/kritzel-engine.d.ts +2 -0
- package/dist/types/components.d.ts +7 -2
- package/dist/types/constants/version.d.ts +1 -1
- package/package.json +1 -1
- package/dist/stencil/p-19e04f32.entry.js +0 -9
- package/dist/stencil/p-ytjzXm9B.js +0 -1
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import{r as t,h as e,H as i,c as r,g as n}from"./p-D9HaikfQ.js";import{b as o,d as s,G as a,n as l,g as c,h,l as u,k as d,J as f,L as p,M as b,S as g,I as v,D as k,i as m,u as y,t as w,j as x,y as z,v as C,N as S,O as I,P as $,Q as M,R as j,T,U as A,q as _,e as O,c as E,f as D,K as F,B as L,z as R,F as W,C as P,E as B,V,m as U,r as N,s as K,o as H,X as G,Y,Z as q,W as X}from"./p-Dta1Yewh.js";import*as Z from"yjs";import"y-indexeddb";import"y-websocket";var J="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};const Q=class{constructor(e){t(this,e)}users=[];avatarSize=40;maxVisible=3;overlap=20;getDisplayName(t){return t.displayName??([t.firstName,t.lastName].filter(Boolean).join(" ")||t.email||"User")}render(){if(!this.users||0===this.users.length)return e(i,{style:{display:"none"}});const t=this.users.slice(0,this.maxVisible),r=this.users.length-this.maxVisible;return e(i,{style:{"--avatar-overlap":`-${this.overlap}px`}},e("div",{class:"avatars"},t.map(((i,r)=>e("div",{class:"avatar-wrapper",style:{marginLeft:r>0?"var(--avatar-overlap)":"0px",zIndex:""+(t.length-r)}},e("kritzel-avatar",{user:i,size:this.avatarSize}),e("span",{class:"avatar-tooltip"},this.getDisplayName(i)))))),r>0&&e("span",{class:"overflow-count"},"+",r,e("span",{class:"avatar-tooltip"},this.users.slice(this.maxVisible).map((t=>e("div",null,this.getDisplayName(t)))))))}};Q.style=":host{display:inline-flex;align-items:center}.avatars{display:flex;align-items:center}.avatar-wrapper{position:relative;transition:margin-left 200ms ease}.avatar-wrapper kritzel-avatar{border-radius:50%;box-shadow:0 0 0 2px var(--kritzel-active-users-avatar-border-color, #ffffff)}.avatars:hover .avatar-wrapper{margin-left:-6px !important}.avatar-tooltip{position:absolute;top:100%;left:50%;transform:translateX(-50%);margin-top:12px;padding:4px 8px;background-color:var(--kritzel-active-users-tooltip-background, #333333);color:var(--kritzel-active-users-tooltip-color, #ffffff);font-family:sans-serif;font-size:12px;font-weight:500;border-radius:4px;white-space:nowrap;width:max-content;pointer-events:none;opacity:0;transition:opacity 150ms ease}.avatar-wrapper:hover .avatar-tooltip,.overflow-count:hover .avatar-tooltip{opacity:1}.overflow-count{position:relative;margin-left:8px;font-family:sans-serif;font-size:var(--kritzel-active-users-overflow-font-size, 14px);font-weight:500;color:var(--kritzel-active-users-overflow-color, #666666);white-space:nowrap;cursor:default}.overflow-count .avatar-tooltip{white-space:nowrap;text-align:left;margin-top:20px}";const tt=class{constructor(e){t(this,e)}user;name;size=32;color;imageError=!1;retryCount=0;maxRetries=3;retryTimer;userChanged(){this.resetImageState()}profileImageUrlChanged(){this.resetImageState()}resetImageState(){this.imageError=!1,this.retryCount=0,clearTimeout(this.retryTimer)}disconnectedCallback(){clearTimeout(this.retryTimer)}getImageUrl(){return this.user?.profileImageUrl}getDisplayName(){return this.user?this.user.displayName??([this.user.firstName,this.user.lastName].filter(Boolean).join(" ")||this.user.email):this.name}getInitials(){const t=this.getDisplayName();if(!t)return;const e=t.trim().split(/\s+/);return e.length>=2?(e[0][0]+e[e.length-1][0]).toUpperCase():e[0][0]?.toUpperCase()}getBackgroundColor(){return this.user?.color??this.color??this.generateColorFromName()}generateColorFromName(){const t=this.getDisplayName()||"";let e=0;for(let i=0;i<t.length;i++)e=t.charCodeAt(i)+((e<<5)-e);return`hsl(${Math.abs(e%360)}, 45%, 55%)`}handleImageError=()=>{if(this.retryCount<this.maxRetries){this.retryCount++;const t=1e3*Math.pow(2,this.retryCount-1);this.retryTimer=setTimeout((()=>{this.imageError=!1}),t)}this.imageError=!0};render(){const t=this.getImageUrl(),r=this.getInitials(),n=t&&!this.imageError,o=!n&&r,s=!n&&!o,a={width:`${this.size}px`,height:`${this.size}px`,fontSize:`${Math.round(.4*this.size)}px`};return e(i,{key:"2067605684a743be45059efd562697ff21fefbcb",style:a,class:{"has-image":!!n,"has-initials":!!o,"has-default":!!s},role:"img","aria-label":this.getDisplayName()||"User avatar"},n&&e("img",{key:"1ed322318335deb011087494a2c437849b5a23a0",src:t,alt:"",class:"avatar-image",ref:t=>{t&&(t.referrerPolicy="no-referrer",t.crossOrigin="anonymous")},onError:this.handleImageError}),o&&e("span",{key:"ff99dded4cb17d6c25880b54e3875c262dfc0440",class:"avatar-initials",style:{backgroundColor:this.getBackgroundColor()}},r),s&&e("span",{key:"5a217c6a1366dea3ceee8bfa03a38917cad7a9f9",class:"avatar-default"},e("svg",{key:"f4537e21772e6e6f1bb60835ad7a56123a200dd7",viewBox:"0 0 24 24",fill:"currentColor"},e("path",{key:"29649695038a506e1caeba3a8b6c066860fb5a1d",d:"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z"}))))}static get watchers(){return{user:[{userChanged:0}],profileImageUrl:[{profileImageUrlChanged:0}]}}};tt.style=":host{display:inline-flex;justify-content:center;align-items:center;border-radius:50%;overflow:hidden;user-select:none;flex-shrink:0}.avatar-image{display:block;width:100%;height:100%;object-fit:cover;border-radius:50%}.avatar-initials{display:flex;justify-content:center;align-items:center;width:100%;height:100%;border-radius:50%;color:var(--kritzel-avatar-initials-color, #ffffff);font-weight:var(--kritzel-avatar-initials-font-weight, 500);font-family:var(--kritzel-avatar-initials-font-family, sans-serif);line-height:1}.avatar-default{display:flex;justify-content:center;align-items:center;width:100%;height:100%;border-radius:50%;background-color:var(--kritzel-avatar-default-background, #e0e0e0);color:var(--kritzel-avatar-default-color, #9e9e9e)}.avatar-default svg{width:60%;height:60%}:host(.has-image){border:var(--kritzel-avatar-border, none)}:host(.has-initials){border:var(--kritzel-avatar-border, none)}:host(.has-default){border:var(--kritzel-avatar-border, none)}";const et=class{constructor(e){t(this,e)}core;showEdgeIndicators=!0;edgeIndicatorPadding=8;remoteCursors=new Map;objectVersion=0;cleanupIntervalId;objectChangeRafId=null;componentDidLoad(){this.core.store.objects?.onAwarenessChange((t=>{this.handleAwarenessChange(t)})),this.core.store.objects?.onObjectsChange((()=>{this.handleRemoteObjectChange()})),this.cleanupIntervalId=setInterval((()=>{this.cleanupStaleCursors()}),3e3)}disconnectedCallback(){this.cleanupIntervalId&&clearInterval(this.cleanupIntervalId),null!==this.objectChangeRafId&&cancelAnimationFrame(this.objectChangeRafId)}handleAwarenessChange(t){const e=this.core.store.objects?.localClientId,i=Date.now(),r=new Map(this.remoteCursors),n=new Set;t.forEach(((t,o)=>{if(o===e)return;if(!t.user)return;n.add(o);const s=t.user,a=t.cursor,l=t.activeObjectId||null,c=t.selectionBox||null,h=r.get(o);r.set(o,{clientId:o,user:s,cursor:a,activeObjectId:l,selectionBox:c,lastUpdated:i,lastCursorMove:!h||!h.cursor!=!a||a&&h.cursor&&(a.x!==h.cursor.x||a.y!==h.cursor.y)?i:h?.lastCursorMove??i})}));for(const t of r.keys())n.has(t)||r.delete(t);this.remoteCursors=r}cleanupStaleCursors(){const t=Date.now();let e=!1;const i=new Map(this.remoteCursors);for(const[r,n]of i)t-n.lastUpdated>3e4?(i.delete(r),e=!0):!e&&t-n.lastCursorMove>1e4&&(e=!0);e&&(this.remoteCursors=i)}isStale(t){return Date.now()-t.lastCursorMove>1e4}hasActiveDrawingCursors(){for(const t of this.remoteCursors.values())if(t.activeObjectId)return!0;return!1}handleRemoteObjectChange(){this.hasActiveDrawingCursors()&&null===this.objectChangeRafId&&(this.objectChangeRafId=requestAnimationFrame((()=>{this.objectChangeRafId=null,this.objectVersion++})))}getActiveObjectTip(t){const e=this.core.store.objects?.findById(t);if(!e)return null;if(e instanceof o&&!e.isCompleted){const t=e.points[e.points.length-1];return t?{x:(t[0]-e.x)/e.scale+e.translateX,y:(t[1]-e.y)/e.scale+e.translateY}:null}return e instanceof s&&!e.isCompleted?{x:(e.endX-e.x)/e.scale+e.translateX,y:(e.endY-e.y)/e.scale+e.translateY}:null}worldToScreen(t,e){const{scale:i,translateX:r,translateY:n}=this.core.store.state;return{x:t*i+r,y:e*i+n}}isInViewport(t,e){const{viewportWidth:i,viewportHeight:r}=this.core.store.state;return t>=0&&t<=i&&e>=0&&e<=r}clampToEdge(t,e){const{viewportWidth:i,viewportHeight:r}=this.core.store.state,n=this.edgeIndicatorPadding,o=Math.max(n,Math.min(i-n,t)),s=Math.max(n,Math.min(r-n,e)),a=o-n,l=i-n-o,c=s-n;let h="top";const u=Math.min(a,l,c,r-n-s);return h=u===a?"left":u===l?"right":u===c?"top":"bottom",{x:o,y:s,angle:Math.atan2(e-s,t-o),edge:h}}getUserDisplayName(t){return t.displayName?t.displayName:t.firstName||t.lastName?[t.firstName,t.lastName].filter(Boolean).join(" "):"Unknown"}getInitials(t){const e=t.trim().split(/\s+/);return 0===e.length||1===e.length&&e[0].length<=1?t:1===e.length?e[0][0].toUpperCase():(e[0][0]+e[e.length-1][0]).toUpperCase()}render(){const t=Array.from(this.remoteCursors.values());return e(i,{key:"0f8678b0a96d80e12d2aa75f85af74a8737f836d"},t.map((t=>{if(!t.cursor)return null;let e,i=!1;if(t.activeObjectId){const r=this.getActiveObjectTip(t.activeObjectId);r?(i=!0,e=this.worldToScreen(r.x,r.y)):e=this.worldToScreen(t.cursor.x,t.cursor.y)}else e=this.worldToScreen(t.cursor.x,t.cursor.y);const r=this.isInViewport(e.x,e.y),n=this.isStale(t),o=t.user.color||"#6B7280";return r?this.renderCursor(t,e.x,e.y,o,n,i):this.showEdgeIndicators?this.renderEdgeIndicator(t,e.x,e.y,o,n,i):null})),t.map((t=>{if(!t.selectionBox)return null;const i=t.user.color||"#6B7280",r=t.selectionBox,n=this.worldToScreen(r.x,r.y),{scale:o}=this.core.store.state;return e("div",{key:`selection-box-${t.clientId}`,class:"remote-selection-box",style:{transform:`translate(${n.x}px, ${n.y}px)`,width:r.width*o+"px",height:r.height*o+"px",backgroundColor:`color-mix(in srgb, ${i} 20%, transparent)`,borderColor:`color-mix(in srgb, ${i} 50%, transparent)`}})})))}renderCursor(t,i,r,n,o,s){return e("div",{key:`cursor-${t.clientId}`,class:{"awareness-cursor":!0,stale:o,"tracking-object":s},style:{transform:`translate(${i}px, ${r}px)`}},e("svg",{class:"cursor-arrow",width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},e("path",{d:"M5 3L19 12L12 13L9 20L5 3Z",fill:n,stroke:"#ffffff","stroke-width":"1.5","stroke-linejoin":"round"})),e("span",{class:"cursor-label",style:{backgroundColor:n}},this.getUserDisplayName(t.user)))}renderEdgeIndicator(t,i,r,n,o,s){const a=this.clampToEdge(i,r),l=180*a.angle/Math.PI+90;let c=0,h=0;"left"===a.edge?c=20:"right"===a.edge?c=-20:"top"===a.edge?h=20:"bottom"===a.edge&&(h=-20);const u=this.getUserDisplayName(t.user);return e("div",{key:`edge-${t.clientId}`,class:{"edge-indicator":!0,stale:o,"tracking-object":s},style:{transform:`translate(${a.x}px, ${a.y}px)`}},e("svg",{class:{"edge-arrow":!0,stale:o},width:"16",height:"16",viewBox:"0 0 16 16",style:{transform:`rotate(${l}deg)`}},e("path",{d:"M8 1L14 13H2L8 1Z",fill:n,stroke:"#ffffff","stroke-width":"1.5","stroke-linejoin":"round"})),e("span",{class:"edge-label",style:{backgroundColor:n,transform:`translate(${c}px, ${h}px)`}},this.getInitials(u)))}};et.style=":host{display:block;position:fixed;top:0;left:0;width:100vw;height:100vh;pointer-events:none;z-index:1}.awareness-cursor{position:absolute;top:0;left:0;transition:transform var(--kritzel-awareness-cursor-transition-duration, 100ms) ease-out, opacity 300ms ease;will-change:transform}.awareness-cursor.stale{opacity:0}.awareness-cursor.tracking-object{transition-duration:0ms}.cursor-arrow{filter:drop-shadow(0 1px 2px rgba(0, 0, 0, 0.3))}.cursor-label{position:absolute;left:16px;top:16px;white-space:nowrap;font-family:-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;font-size:var(--kritzel-awareness-cursor-label-font-size, 12px);color:var(--kritzel-awareness-cursor-label-text-color, #ffffff);padding:2px 8px;border-radius:4px;line-height:1.4;font-weight:500;pointer-events:none;user-select:none}.edge-indicator{position:absolute;top:-12px;left:-12px;width:24px;height:24px;display:flex;align-items:center;justify-content:center;transition:transform var(--kritzel-awareness-cursor-transition-duration, 100ms) ease-out, opacity 300ms ease;will-change:transform;pointer-events:auto;user-select:none;cursor:pointer}.edge-indicator.stale{opacity:0}.edge-indicator.tracking-object{transition-duration:0ms}.edge-arrow{position:absolute;filter:drop-shadow(0 1px 3px rgba(0, 0, 0, 0.3));transition:opacity 300ms ease}.edge-arrow.stale{opacity:0}.edge-label{position:absolute;white-space:nowrap;font-family:-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;font-size:var(--kritzel-awareness-cursor-label-font-size, 12px);color:var(--kritzel-awareness-cursor-label-text-color, #ffffff);padding:2px 8px;border-radius:4px;line-height:1.4;font-weight:500;pointer-events:none;opacity:0;transform-origin:center;transition:opacity 150ms ease}.edge-indicator:hover .edge-label{opacity:1}.remote-selection-box{position:absolute;top:0;left:0;border-width:2px;border-style:solid;pointer-events:none;will-change:transform, width, height;transition:transform var(--kritzel-awareness-cursor-transition-duration, 100ms) ease-out, width var(--kritzel-awareness-cursor-transition-duration, 100ms) ease-out, height var(--kritzel-awareness-cursor-transition-duration, 100ms) ease-out}";const it=class{constructor(e){t(this,e),this.backToContent=r(this,"backToContent")}visible=!1;text="Back to content";backToContent;handleClick=()=>{this.backToContent.emit()};render(){return e(i,{key:"7d33e599832eb5e4f65b9fdbb9239cfe157733af"},e("button",{key:"2795d86a9bc756624f1bd32a9f7f7950b650ce42",class:{"back-to-content-button":!0,visible:this.visible},onClick:this.handleClick},e("kritzel-icon",{key:"6a97b297b28aa080e20f3c398faa1788fbde5d49",name:"chevrons-left"})))}};it.style=":host{display:block;z-index:var(--kritzel-back-to-content-z-index, 1000)}.back-to-content-button{display:flex;align-items:center;justify-content:center;height:var(--kritzel-back-to-content-height, 50px);box-sizing:border-box;gap:var(--kritzel-back-to-content-gap, 6px);padding:var(--kritzel-back-to-content-padding, 0 16px);border:var(--kritzel-back-to-content-border, 1px solid #ebebeb);border-radius:var(--kritzel-back-to-content-border-radius, 12px);background-color:var(--kritzel-back-to-content-background-color, #ffffff);color:var(--kritzel-back-to-content-color, #000000);font-size:var(--kritzel-back-to-content-font-size, 14px);font-weight:var(--kritzel-back-to-content-font-weight, 500);cursor:var(--kritzel-global-pointer-cursor, pointer);box-shadow:var(--kritzel-back-to-content-box-shadow, 0 0 3px rgba(0, 0, 0, 0.08));opacity:0;pointer-events:none;transition:opacity 0.2s ease-out, transform 0.2s ease-out, background-color 0.15s ease-out;-webkit-tap-highlight-color:transparent;user-select:none}.back-to-content-button.visible{opacity:1;pointer-events:auto}@media (hover: hover){.back-to-content-button:hover{background-color:var(--kritzel-back-to-content-hover-background-color, hsl(0, 0%, 0%, 4.3%))}}.back-to-content-button:active{background-color:var(--kritzel-back-to-content-active-background-color, hsl(0, 0%, 0%, 8.6%))}";const rt=class{constructor(e){t(this,e),this.buttonClick=r(this,"buttonClick")}variant="primary";disabled=!1;type="button";buttonClick;handleClick=t=>{this.disabled||(t.stopPropagation(),this.buttonClick.emit())};render(){return e(i,{key:"aa82a9e0c6c39b0b2bce597ac2e864049543d474"},e("button",{key:"5bda14f9fef89abacb9cd04e5aaa8ae7ae25048a",type:this.type,class:{"kritzel-button":!0,[this.variant]:!0,disabled:this.disabled},disabled:this.disabled,onClick:this.handleClick},e("slot",{key:"8585675eec39345ddfbf3f6dbb705035f7a5d099"})))}};rt.style=":host{display:inline-block;font-family:sans-serif}button{border:none;background-color:transparent;padding:0;margin:0;font-family:inherit;font-size:inherit;-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:var(--kritzel-global-pointer-cursor, pointer);display:inline-flex;align-items:center;justify-content:center;gap:6px;border-radius:var(--kritzel-button-border-radius, 8px);padding:var(--kritzel-button-padding, 12px 20px);font-size:var(--kritzel-button-font-size, 14px);font-weight:var(--kritzel-button-font-weight, 500);transition:background-color 0.15s ease, opacity 0.15s ease;-webkit-tap-highlight-color:transparent}button.primary{background-color:var(--kritzel-button-primary-background-color, #007AFF);color:var(--kritzel-button-primary-color, #ffffff)}button.primary:hover{background-color:var(--kritzel-button-primary-hover-background-color, #006ae6)}button.primary:active{background-color:var(--kritzel-button-primary-active-background-color, #005bbf)}button.secondary{background-color:var(--kritzel-button-secondary-background-color, #f0f0f0);color:var(--kritzel-button-secondary-color, #333333)}button.secondary:hover{background-color:var(--kritzel-button-secondary-hover-background-color, #e0e0e0)}button.secondary:active{background-color:var(--kritzel-button-secondary-active-background-color, #d0d0d0)}button.text{background-color:transparent;color:var(--kritzel-button-text-color, #007AFF)}button.text:hover{background-color:var(--kritzel-button-text-hover-background-color, rgba(0, 122, 255, 0.08))}button.text:active{background-color:var(--kritzel-button-text-active-background-color, rgba(0, 122, 255, 0.15))}button.disabled{opacity:0.4;cursor:not-allowed;pointer-events:none}";const nt=class{constructor(e){t(this,e)}value;theme;size=24;resolveColor(){return this.value?"string"==typeof this.value?this.value:a.resolveThemeColor(this.value,this.theme):""}isLightColor(t){if(!t)return!1;let e=0,i=0,r=0,n=t.startsWith("#")?t.slice(1):t;if(3===n.length)e=parseInt(n[0]+n[0],16),i=parseInt(n[1]+n[1],16),r=parseInt(n[2]+n[2],16);else{if(6!==n.length)return!1;e=parseInt(n.substring(0,2),16),i=parseInt(n.substring(2,4),16),r=parseInt(n.substring(4,6),16)}return!(isNaN(e)||isNaN(i)||isNaN(r))&&.299*e+.587*i+.114*r>220}render(){const t=this.resolveColor(),r=this.isLightColor(t);return e(i,{key:"a740b94f2baacb978b26deae1ea1057c7faf9036"},e("div",{key:"e82f83a23e44a2ff23b5efbfac28e4c47cd5b749",class:"checkerboard-bg",style:{width:`${this.size}px`,height:`${this.size}px`,borderRadius:"50%",display:"inline-block",position:"relative"}},e("div",{key:"d83e2be171f89ee4cd53e8cf83ab6591f585129f",class:{"color-circle":!0,white:r},style:{backgroundColor:t,width:`${this.size}px`,height:`${this.size}px`,borderRadius:"50%",position:"absolute",top:"0",left:"0",display:"inline-block"}})))}};nt.style=":host{display:flex}.checkerboard-bg{background:repeating-conic-gradient( var(--kritzel-checkerboard-color-dark, #ccc) 0% 25%, var(--kritzel-checkerboard-color-light, #fff) 0% 50% ) 50% / 8px 8px;position:relative;overflow:hidden}.color-circle{width:24px;height:24px;border-radius:50%;box-sizing:border-box;display:block}.color-circle.white{border:1px solid var(--kritzel-color-palette-circle-border-color, #dddcdc)}";const ot=class{constructor(e){t(this,e),this.colorChange=r(this,"colorChange")}colors=[];selectedColor=null;isExpanded=!1;isOpaque=!1;opacity=1;theme;colorChange;handleColorClick(t){this.selectedColor=t,this.colorChange.emit(t)}handleKeyDown(t,e){"Enter"!==t.key&&" "!==t.key||(t.preventDefault(),this.handleColorClick(e))}calculateHeight(){const t=Math.ceil(this.colors.length/6);return 32*t+8*(t-1)+"px"}areColorsEqual(t,e){return!!t&&t.light===e.light&&t.dark===e.dark}render(){const t=this.isExpanded?this.colors:this.colors.slice(0,6),r=this.isExpanded?this.calculateHeight():"32px";return e(i,{key:"a2c996d16a44f66471f6f76e08129142fc9f5ddb"},e("div",{key:"245f4b9ff50412b84ede221d22b0894a104a6895",class:{"color-grid":!0,expanded:this.isExpanded},style:{height:r}},t.map((t=>e("div",{tabIndex:0,class:{"color-container":!0,selected:this.areColorsEqual(this.selectedColor,t)},onClick:()=>this.handleColorClick(t),onKeyDown:e=>this.handleKeyDown(e,t)},e("kritzel-color",{value:a.applyOpacity(t,this.opacity,this.theme),theme:this.theme}))))))}};ot.style=":host{display:flex;align-items:flex-start;gap:8px;padding:0;width:100%;box-sizing:border-box}.color-grid{width:100%;display:grid;grid-template-columns:repeat(6, 32px);gap:8px;justify-items:center;overflow:hidden;height:40px;transition:height 0.1s ease-in-out}.color-grid.expanded{height:500px}.color-container{display:flex;justify-content:center;align-items:center;width:32px;height:32px;border-radius:50%;cursor:var(--kritzel-global-pointer-cursor, pointer);border:2px solid transparent;box-sizing:border-box}.color-container:hover{background-color:var(--kritzel-color-palette-hover-background-color, #ebebeb)}.color-container.selected{border-color:var(--kritzel-selection-border-color, #007AFF);background-color:var(--kritzel-color-palette-selected-background-color)}";const st=class{constructor(e){t(this,e),this.actionSelected=r(this,"actionSelected"),this.close=r(this,"close")}get host(){return n(this)}items;onItemsChanged(){this.updateMenuItems()}objects;actionSelected;close;processedItems=[];openSubmenuIndex=null;submenuPosition="right";submenuTimer=null;submenuRefs=new Map;menuItemWrapperRefs=new Map;handleOutsideClick(t){t.composedPath().includes(this.host)||this.close.emit()}componentWillLoad(){this.updateMenuItems()}componentDidLoad(){this.adjustPositionToViewport()}componentDidUpdate(){this.adjustPositionToViewport(),this.adjustSubmenuPosition()}disconnectedCallback(){this.submenuTimer&&clearTimeout(this.submenuTimer)}adjustPositionToViewport(){const t=this.host.getBoundingClientRect(),e=window.innerWidth,i=window.innerHeight,r=parseFloat(this.host.style.left)||0,n=parseFloat(this.host.style.top)||0;let o=r,s=n;t.right>e-8&&(o=e-t.width-8),t.bottom>i-8&&(s=i-t.height-8),o<8&&(o=8),s<8&&(s=8),o===r&&s===n||(this.host.style.left=`${o}px`,this.host.style.top=`${s}px`)}adjustSubmenuPosition(){if(null===this.openSubmenuIndex)return;const t=this.submenuRefs.get(this.openSubmenuIndex);if(!t)return;const e=t.getBoundingClientRect(),i=window.innerHeight;t.style.top=e.bottom>i-8?-(e.bottom-(i-8))+"px":"0px"}handleItemClick(t,e,i){e||i||t.action&&this.actionSelected.emit(t)}handleItemMouseEnter(t,e){this.submenuTimer&&(clearTimeout(this.submenuTimer),this.submenuTimer=null),this.submenuTimer=e?setTimeout((()=>{const e=this.menuItemWrapperRefs.get(t);if(e){const t=e.getBoundingClientRect(),i=window.innerWidth;this.submenuPosition=t.right+160>i-8?"left":"right"}else this.submenuPosition="right";this.openSubmenuIndex=t}),150):setTimeout((()=>{this.openSubmenuIndex=null}),150)}handleSubmenuMouseEnter(){this.submenuTimer&&(clearTimeout(this.submenuTimer),this.submenuTimer=null)}handleSubmenuMouseLeave(){this.submenuTimer=setTimeout((()=>{this.openSubmenuIndex=null}),150)}async updateMenuItems(){this.processedItems=await this.processItems(this.items)}async processItems(t){const e=[];for(const i of t)if(await this.evaluateProperty(i.visible,!0)){const t=await this.evaluateProperty(i.disabled,!1);let r;i.children&&i.children.length>0&&(r=await this.processItems(i.children)),e.push({item:i,isDisabled:t,processedChildren:r})}return e}async evaluateProperty(t,e){return"boolean"==typeof t?t:"function"==typeof t?await Promise.resolve(t(null,this.objects)):e}renderSubmenu(t,i){return e("div",{class:{"submenu-container":!0,"position-left":"left"===this.submenuPosition},ref:t=>t&&this.submenuRefs.set(i,t),onMouseEnter:()=>this.handleSubmenuMouseEnter(),onMouseLeave:()=>this.handleSubmenuMouseLeave()},t.map((({item:i,isDisabled:r,processedChildren:n},o)=>{const s=o>0?t[o-1].item:null,a=n&&n.length>0;return[s&&s.group!==i.group&&e("div",{class:"menu-divider",key:`submenu-divider-${o}`}),e("button",{key:`submenu-${i.label}-${o}`,class:{"menu-item":!0,disabled:r,"has-children":a},onClick:()=>this.handleItemClick(i,r,a),disabled:r},i.icon&&e("kritzel-icon",{name:i.icon,size:16}),e("span",{class:"label"},i.label),a&&e("kritzel-icon",{name:"chevron-right",size:12,class:"submenu-arrow"}))]})))}render(){return e(i,{key:"100ec82feefbc285f8e50fca3f23f853c33aa215"},e("div",{key:"9305a0190bdcf7a9e4b5ae7473651a0261dbfd7c",class:"menu-container"},this.processedItems.map((({item:t,isDisabled:i,processedChildren:r},n)=>{const o=n>0?this.processedItems[n-1].item:null,s=r&&r.length>0,a=this.openSubmenuIndex===n;return[o&&o.group!==t.group&&e("div",{class:"menu-divider",key:`divider-${n}`}),e("div",{class:"menu-item-wrapper",ref:t=>t&&this.menuItemWrapperRefs.set(n,t),onMouseEnter:()=>this.handleItemMouseEnter(n,s)},e("button",{key:`${t.label}-${n}`,class:{"menu-item":!0,disabled:i,"has-children":s,"submenu-open":a},onClick:()=>this.handleItemClick(t,i,s),disabled:i&&!s},t.icon&&e("kritzel-icon",{name:t.icon,size:16}),e("span",{class:"label"},t.label),s&&e("kritzel-icon",{name:"chevron-right",size:12,class:"submenu-arrow"})),s&&a&&this.renderSubmenu(r,n))]}))))}static get watchers(){return{items:[{onItemsChanged:0}]}}};st.style=":host{display:block}.menu-container{display:flex;flex-direction:column;gap:var(--kritzel-context-menu-item-spacing, 2px);background-color:var(--kritzel-context-menu-background-color, #ffffff);border-radius:var(--kritzel-context-menu-border-radius, 12px);box-shadow:var(--kritzel-context-menu-box-shadow, 0 1px 6px rgba(0, 0, 0, 0.12));border:var(--kritzel-context-menu-border, 1px solid #ebebeb);padding:var(--kritzel-context-menu-padding, 4px);min-width:var(--kritzel-context-menu-min-width, 140px)}.menu-item-wrapper{position:relative}.menu-item{display:flex;align-items:center;gap:var(--kritzel-context-menu-item-gap, 8px);background:none;border:none;text-align:left;padding:var(--kritzel-context-menu-item-padding, 8px);border-radius:var(--kritzel-context-menu-item-border-radius, 12px);cursor:var(--kritzel-global-pointer-cursor, pointer);font-size:var(--kritzel-context-menu-item-font-size, 14px);color:var(--kritzel-context-menu-item-color, #333333);white-space:nowrap;-webkit-tap-highlight-color:transparent;width:100%}.menu-item:not(.disabled):hover,.menu-item.submenu-open{background-color:var(--kritzel-context-menu-item-hover-background-color, hsl(0, 0%, 0%, 4.3%))}.menu-item:not(.disabled):active{background-color:var(--kritzel-context-menu-item-active-background-color, hsl(0, 0%, 0%, 8.6%))}.menu-item.disabled{color:var(--kritzel-context-menu-item-disabled-color, #aaaaaa)}.menu-item.has-children.disabled{cursor:var(--kritzel-global-pointer-cursor, pointer);color:var(--kritzel-context-menu-item-color, #333333)}.menu-item kritzel-icon{opacity:0.8;flex-shrink:0}.menu-item.disabled kritzel-icon{opacity:0.4}.menu-item.has-children.disabled kritzel-icon{opacity:0.8}.label{flex-grow:1}.submenu-arrow{margin-left:auto;opacity:0.5}.menu-divider{height:1px;background-color:var(--kritzel-context-menu-divider-color, rgba(0, 0, 0, 0.1));margin:var(--kritzel-context-menu-divider-margin, 4px 8px)}.submenu-container{position:absolute;top:0;left:100%;margin-left:4px;display:flex;flex-direction:column;gap:var(--kritzel-context-menu-item-spacing, 2px);background-color:var(--kritzel-context-menu-background-color, #ffffff);border-radius:var(--kritzel-context-menu-border-radius, 12px);box-shadow:var(--kritzel-context-menu-box-shadow, 0 1px 6px rgba(0, 0, 0, 0.12));border:var(--kritzel-context-menu-border, 1px solid #ebebeb);padding:var(--kritzel-context-menu-padding, 4px);min-width:120px}.submenu-container.position-left{left:auto;right:100%;margin-left:0;margin-right:4px}";class at{static getToolConfig(t){return t instanceof l?t.getToolConfig():t instanceof c?{type:"brush",colorProperty:"color",sizeProperty:"size",opacityProperty:"opacity",paletteSource:"palette",controls:[{type:"stroke-size",propertyName:"size"}]}:t instanceof h?{type:"line",colorProperty:"color",sizeProperty:"size",opacityProperty:"opacity",paletteSource:"palette",controls:[{type:"stroke-size",propertyName:"size"},{type:"line-endings",propertyName:"arrows",additionalProps:{}}]}:t instanceof u?{type:"shape",colorProperty:"strokeColor",sizeProperty:"strokeWidth",opacityProperty:"opacity",paletteSource:"palette",controls:[{type:"stroke-size",propertyName:"strokeWidth"},{type:"shape-fill",propertyName:"fillColor",additionalProps:{}}]}:t instanceof d?{type:"text",colorProperty:"fontColor",sizeProperty:"fontSize",opacityProperty:"opacity",paletteSource:"palette",controls:[{type:"font-size",propertyName:"fontSize",additionalProps:{}},{type:"font-family",propertyName:"fontFamily"}]}:null}}const lt=class{constructor(e){t(this,e),this.isControlsReady=r(this,"isControlsReady")}get host(){return n(this)}controls=[];activeControl=null;isUtilityPanelVisible=!0;undoState=null;theme;isControlsReady;firstConfig=null;isTouchDevice=f.isTouchDevice();selectedSubOptions=new Map;canScrollLeft=!1;canScrollRight=!1;needsScrolling=!1;displayValues=null;handleKeyDown(t){"Escape"===t.key&&(t.preventDefault(),this.closeTooltip(),this.kritzelEngine?.enable())}async handleActiveToolChange(t){this.activeControl=this.controls.find((e=>e.tool===t.detail))||null,this.activeControl?.tool&&this.updateDisplayValues(this.activeControl.tool),this.closeTooltip()}handleSelectionChange(){this.activeControl?.tool instanceof l&&this.updateDisplayValues(this.activeControl.tool)}onThemeChange(){this.activeControl?.tool&&this.updateDisplayValues(this.activeControl.tool)}async closeTooltip(){document.dispatchEvent(new CustomEvent("kritzelTooltipCloseAll"))}kritzelEngine=null;toolsScrollRef=null;configTriggerRef=null;get activeToolAsTextTool(){return this.activeControl?.tool}get activeToolAsBrushTool(){return this.activeControl?.tool}get activeToolAsLineTool(){return this.activeControl?.tool}get activeToolAsShapeTool(){return this.activeControl?.tool}handleDisplayValuesChange=t=>{const e=t.detail;this.displayValues&&this.displayValues.color===e.color&&this.displayValues.size===e.size&&this.displayValues.fontFamily===e.fontFamily||(this.displayValues=e)};updateDisplayValues(t){const e=at.getToolConfig(t);if(!e)return void(this.displayValues=null);const i=t[e.sizeProperty],r={color:a.applyOpacity(t[e.colorProperty],t[e.opacityProperty]??1,this.theme),size:i};t instanceof d&&(r.fontFamily=t.fontFamily),this.displayValues&&this.displayValues.color===r.color&&this.displayValues.size===r.size&&this.displayValues.fontFamily===r.fontFamily||(this.displayValues=r)}async componentWillLoad(){await this.initializeEngine(),await this.initializeTools(),this.isControlsReady.emit()}componentDidLoad(){this.updateScrollIndicators()}componentDidRender(){this.updateScrollIndicators()}updateScrollIndicators(){if(!this.toolsScrollRef)return;const{scrollLeft:t,scrollWidth:e,clientWidth:i}=this.toolsScrollRef,r=t>2,n=t+i<e-2,o=e>i;this.canScrollLeft!==r&&(this.canScrollLeft=r),this.canScrollRight!==n&&(this.canScrollRight=n),this.needsScrolling!==o&&(this.needsScrolling=o)}handleToolsScroll=()=>{this.updateScrollIndicators()};async initializeEngine(){if(await customElements.whenDefined("kritzel-engine"),this.kritzelEngine=this.host.parentElement.querySelector("kritzel-engine"),!this.kritzelEngine)throw new Error("kritzel-engine not found in parent element.")}async initializeTools(){for(const t of this.controls)"tool"===t.type&&t.tool&&(t.tool=await this.kritzelEngine.registerTool(t.name,t.tool,t.config)),"tool"===t.type&&t.isDefault&&t.tool&&(await this.kritzelEngine.changeActiveTool(t.tool),this.activeControl=t,this.updateDisplayValues(t.tool)),"config"===t.type&&(null===this.firstConfig?this.firstConfig=t:console.warn("Only one config control is allowed. The first one will be used."))}async handleControlClick(t){this.activeControl=t,"tool"===this.activeControl.type&&(this.updateDisplayValues(this.activeControl.tool),await this.kritzelEngine.changeActiveTool(this.activeControl.tool))}async handleToolChange(t){this.activeControl={...this.activeControl,tool:t.detail},await this.kritzelEngine.changeActiveTool(this.activeControl.tool)}getSelectedSubOption(t){if(t.subOptions?.length)return this.selectedSubOptions.get(t.name)||t.subOptions[0]}async selectSubOption(t,e){const i=new Map(this.selectedSubOptions);i.set(t.name,e),this.selectedSubOptions=i,t.tool&&"function"!=typeof t.tool&&(t.tool[e.toolProperty]=e.value),this.closeTooltip(),await this.handleControlClick(t)}render(){const t=this.activeControl?.tool instanceof c||this.activeControl?.tool instanceof d||this.activeControl?.tool instanceof h||this.activeControl?.tool instanceof u||this.activeControl?.tool instanceof l&&this.activeControl.tool.hasSelection(),r=this.controls.filter((t=>"tool"===t.type||"separator"===t.type)),n=this.controls.find((t=>"config"===t.type&&t.name===this.firstConfig?.name));return e(i,{key:"ea5e17d6995c228862b6d3375213b8f4ff05f04b",class:{mobile:this.isTouchDevice}},this.isUtilityPanelVisible&&e("kritzel-utility-panel",{key:"3296551d078f9d358efff1438fdcf723349fa5e1",style:{position:"absolute",bottom:"56px",left:"12px"},undoState:this.undoState,onUndo:()=>this.kritzelEngine?.undo(),onRedo:()=>this.kritzelEngine?.redo(),onDelete:()=>this.kritzelEngine?.delete()}),e("div",{key:"9cbea189d5875cda4f09dc7228345e0cb268d47d",class:"kritzel-controls"},e("div",{key:"0df655a7ac5bd6bc164b82703bc212b480058ba2",class:{"scroll-indicator-left":!0,visible:this.canScrollLeft}}),e("div",{key:"bc16b645b6c6a12ec6bd8420a8d84aee83d2b6d2",class:"kritzel-tools-scroll",ref:t=>this.toolsScrollRef=t,onScroll:this.handleToolsScroll},r.map((t=>{if(t.subOptions?.length){const i=this.getSelectedSubOption(t),r=this.activeControl?.name===t.name;return e("div",{class:{"kritzel-control-split":!0,selected:r},key:t.name,"data-testid":`tool-${t.name}`,ref:e=>{e&&(t._anchorRef=e)}},e("button",{class:"kritzel-control-main",onClick:()=>this.handleControlClick(t),title:i?.label,"data-testid":`tool-${t.name}-main`},e("kritzel-icon",{name:i?.icon||t.icon})),e("button",{class:{"kritzel-control-dropdown":!0,visible:r},ref:e=>{e&&(t._triggerRef=e)},"aria-label":"Select shape type","data-testid":`tool-${t.name}-dropdown`,tabIndex:r?0:-1},e("kritzel-icon",{name:"chevron-down",size:12})),e("kritzel-tooltip",{anchorElement:t._anchorRef,triggerElement:t._triggerRef},e("div",{class:"kritzel-submenu-content"},t.subOptions.map((r=>e("button",{class:{"kritzel-submenu-item":!0,active:r.id===i?.id},key:r.id,"data-testid":`suboption-${r.id}`,onClick:()=>this.selectSubOption(t,r)},e("kritzel-icon",{name:r.icon,size:20}),e("span",null,r.label)))))))}return"separator"===t.type?e("div",{class:"kritzel-control-separator",key:t.name}):e("button",{class:{"kritzel-control":!0,selected:this.activeControl?.name===t?.name},key:t.name,"data-testid":`tool-${t.name}`,onClick:()=>this.handleControlClick?.(t)},e("kritzel-icon",{name:t.icon}))}))),e("div",{key:"2e0824a991997d52168a3d922c2214ed66f5bf57",class:{"scroll-indicator-right":!0,visible:this.canScrollRight&&!(n&&this.activeControl&&t)}}),n&&this.activeControl&&e("div",{class:{"kritzel-config-container":!0,visible:t},key:n.name},e("div",{key:"d2cb554f56ce0f3bfe72e85fcbb506199387c15f",class:{"config-gradient-left":!0,visible:this.needsScrolling}}),e("kritzel-tooltip",{key:"39412859a99c71b536e0b2ed0045b671a975af7e",anchorElement:this.host.shadowRoot?.querySelector(".kritzel-config-container"),triggerElement:this.configTriggerRef},e("kritzel-tool-config",{key:"1977ceddd337df53e8636e2bddd1d928aca3a1ff",tool:this.activeControl.tool,theme:this.theme,onToolChange:t=>this.handleToolChange?.(t),onDisplayValuesChange:this.handleDisplayValuesChange,style:{width:"100%",height:"100%"}})),e("div",{key:"06bd3bf3558931a0c2317e149d8990f42e77adae",tabIndex:t?0:-1,class:"kritzel-config","data-testid":"tool-config",ref:t=>{t&&(this.configTriggerRef=t)},onKeyDown:t=>{"Enter"===t.key&&t.target.click()},style:{cursor:"pointer"}},this.activeControl.tool instanceof d&&this.displayValues?e("div",{class:"font-container"},e("kritzel-font",{fontFamily:this.displayValues.fontFamily,size:this.displayValues.size,color:this.displayValues.color})):this.displayValues&&e("div",{class:"color-container"},e("kritzel-color",{value:this.displayValues.color,theme:this.theme,size:this.displayValues.size,style:{borderRadius:"50%",border:"none"}}))))))}static get assetsDirs(){return["../assets"]}static get watchers(){return{theme:[{onThemeChange:0}]}}};lt.style=":host{display:flex;flex-direction:column;user-select:none;max-width:calc(100vw - 16px)}:host(.mobile){--kritzel-controls-control-hover-background-color:transparent;--kritzel-controls-control-active-background-color:transparent}.kritzel-controls{display:flex;flex-direction:row;align-items:center;justify-content:flex-start;gap:var(--kritzel-controls-gap, 8px);height:100%;padding:var(--kritzel-controls-padding, 8px);background-color:var(--kritzel-controls-background-color, #ffffff);border-radius:var(--kritzel-controls-border-radius, 16px);box-shadow:var(--kritzel-controls-box-shadow, 0 0 3px rgba(0, 0, 0, 0.08));border:var(--kritzel-controls-border, 1px solid #ebebeb);z-index:10000;position:relative;max-width:100%;overflow:hidden}.kritzel-tools-scroll{display:flex;flex-direction:row;align-items:center;gap:var(--kritzel-controls-gap, 8px);overflow-x:auto;overflow-y:hidden;flex:1 1 auto;min-width:0;padding:4px;margin:-4px;scrollbar-width:none;-ms-overflow-style:none}.kritzel-tools-scroll::-webkit-scrollbar{display:none}.scroll-indicator-left,.scroll-indicator-right{position:absolute;top:0;bottom:0;width:32px;pointer-events:none;opacity:0;transition:opacity 0.2s ease-out;z-index:1}.scroll-indicator-left{left:0;background:linear-gradient(to right, var(--kritzel-controls-background-color, #ffffff), transparent);border-radius:var(--kritzel-controls-border-radius, 16px) 0 0 var(--kritzel-controls-border-radius, 16px)}.scroll-indicator-right{right:0;background:linear-gradient(to left, var(--kritzel-controls-background-color, #ffffff), transparent);border-radius:0 var(--kritzel-controls-border-radius, 16px) var(--kritzel-controls-border-radius, 16px) 0}.scroll-indicator-left.visible,.scroll-indicator-right.visible{opacity:1}.kritzel-control{display:flex;justify-content:center;align-items:center;color:var(--kritzel-controls-control-color, #000000);border-radius:var(--kritzel-controls-control-border-radius, 12px);padding:var(--kritzel-controls-control-padding, 8px);border:none;background:none;cursor:var(--kritzel-global-pointer-cursor, pointer);-webkit-tap-highlight-color:transparent;font-weight:bold}.kritzel-control:focus,.kritzel-control:hover{background-color:var(--kritzel-controls-control-hover-background-color, hsl(0, 0%, 0%, 4.3%))}.kritzel-control:active{background-color:var(--kritzel-controls-control-active-background-color, hsl(0, 0%, 0%, 8.6%))}.kritzel-control.selected,.kritzel-control.selected:hover,.kritzel-control.selected:active{background-color:var(--kritzel-controls-control-selected-background-color, #007AFF) !important;color:var(--kritzel-controls-control-selected-color, #ffffff) !important}.kritzel-control.selected:focus{background-color:var(--kritzel-controls-control-selected-background-color, #007bffe3) !important}.kritzel-control-separator{width:1px;height:24px;background-color:var(--kritzel-controls-border, #ebebeb);margin:0 4px}.kritzel-control-split{position:relative;display:flex;align-items:center;border-radius:var(--kritzel-controls-control-border-radius, 12px);color:var(--kritzel-controls-control-color, #000000)}.kritzel-control-split .kritzel-control-main{display:flex;justify-content:center;align-items:center;padding:var(--kritzel-controls-control-padding, 8px);border:none;background:none;cursor:var(--kritzel-global-pointer-cursor, pointer);-webkit-tap-highlight-color:transparent;border-radius:var(--kritzel-controls-control-border-radius, 12px);color:inherit}.kritzel-control-split.selected .kritzel-control-main{border-radius:var(--kritzel-controls-control-border-radius, 12px) 0 0 var(--kritzel-controls-control-border-radius, 12px)}.kritzel-control-split .kritzel-control-dropdown{display:flex;justify-content:center;align-items:center;align-self:stretch;border:none;background:none;cursor:var(--kritzel-global-pointer-cursor, pointer);-webkit-tap-highlight-color:transparent;border-radius:0 var(--kritzel-controls-control-border-radius, 12px) var(--kritzel-controls-control-border-radius, 12px) 0;color:inherit;width:0;padding:0;opacity:0;overflow:hidden;pointer-events:none;transition:width 0.15s ease-out, padding 0.15s ease-out, opacity 0.15s ease-out}.kritzel-control-split .kritzel-control-dropdown.visible{width:auto;padding:0 6px;opacity:1;pointer-events:auto}.kritzel-control-split .kritzel-control-main:focus,.kritzel-control-split .kritzel-control-main:hover,.kritzel-control-split .kritzel-control-dropdown:focus,.kritzel-control-split .kritzel-control-dropdown:hover{background-color:var(--kritzel-controls-control-hover-background-color, hsl(0, 0%, 0%, 4.3%))}.kritzel-control-split .kritzel-control-main:active,.kritzel-control-split .kritzel-control-dropdown:active{background-color:var(--kritzel-controls-control-active-background-color, hsl(0, 0%, 0%, 8.6%))}.kritzel-control-split.selected{background-color:var(--kritzel-controls-control-selected-background-color, #007AFF) !important;color:var(--kritzel-controls-control-selected-color, #ffffff) !important}.kritzel-control-split.selected .kritzel-control-main:hover,.kritzel-control-split.selected .kritzel-control-dropdown:hover{background-color:rgba(255, 255, 255, 0.15)}.kritzel-submenu-content{display:flex;flex-direction:column;gap:var(--kritzel-submenu-gap, 4px);min-width:140px}.kritzel-submenu-item{display:flex;align-items:center;gap:10px;padding:10px 12px;border:none;background:none;cursor:var(--kritzel-global-pointer-cursor, pointer);border-radius:8px;color:var(--kritzel-controls-control-color, #000000);font-size:14px;text-align:left;white-space:nowrap;-webkit-tap-highlight-color:transparent}.kritzel-submenu-item:hover{background-color:var(--kritzel-controls-control-hover-background-color, hsl(0, 0%, 0%, 4.3%))}.kritzel-submenu-item.active{background-color:var(--kritzel-controls-control-selected-background-color, #007AFF);color:var(--kritzel-controls-control-selected-color, #ffffff)}.kritzel-submenu-item.active:hover{background-color:var(--kritzel-controls-control-selected-background-color, #007AFF)}.kritzel-config-container{position:relative;display:flex;justify-content:center;align-items:center;height:40px;box-sizing:border-box;-webkit-tap-highlight-color:transparent;flex-shrink:0;width:0;opacity:0;overflow:hidden;pointer-events:none;margin-left:calc(-1 * var(--kritzel-controls-gap, 8px));transition:width 0.2s ease-out, opacity 0.2s ease-out, margin-left 0.2s ease-out}.kritzel-config-container.visible{width:40px;opacity:1;pointer-events:auto;margin-left:0;overflow:visible}.config-gradient-left{position:absolute;top:0;bottom:0;left:-32px;width:32px;background:linear-gradient(to right, transparent, var(--kritzel-controls-background-color, #ffffff));pointer-events:none;z-index:1;opacity:0;transition:opacity 0.2s ease-out}.config-gradient-left.visible{opacity:1}.kritzel-config{display:flex;justify-content:center;align-items:center;cursor:var(--kritzel-global-pointer-cursor, pointer);border-radius:50%}.color-container{display:flex;justify-content:center;align-items:center;width:32px;height:32px;border-radius:50%;cursor:var(--kritzel-global-pointer-cursor, pointer);border:2px solid transparent;box-sizing:border-box;background-color:var(--kritzel-color-palette-hover-background-color, #ebebeb)}.font-container{display:flex;justify-content:center;align-items:center;width:32px;height:32px;border-radius:50%;cursor:var(--kritzel-global-pointer-cursor, pointer);border:2px solid transparent;box-sizing:border-box;background-color:var(--kritzel-color-palette-hover-background-color, #ebebeb)}.no-config{height:24px;width:24px;border-radius:50%;border:1px dashed gray}kritzel-tooltip{z-index:10001}";const ct=class{constructor(e){t(this,e)}get host(){return n(this)}user;avatarSize=40;dialogRef;handleAvatarClick=t=>{t.stopPropagation(),this.dialogRef?.open()};render(){return e(i,{key:"a735cb9f16f4898fde0b52573affa2d270a8f1de"},e("kritzel-avatar",{key:"d449a515182718ab4ef3b26b2277696bbc7ab46f",user:this.user,size:this.avatarSize,onClick:this.handleAvatarClick}),e("kritzel-current-user-dialog",{key:"3542f6df43c9924218e344f70bdc398c74a8eae6",ref:t=>this.dialogRef=t,user:this.user}))}};ct.style=":host{display:inline-flex;align-items:center;justify-content:center;-webkit-tap-highlight-color:transparent}kritzel-avatar{cursor:var(--kritzel-global-pointer-cursor, pointer);border-radius:50%}";const ht=class{constructor(e){t(this,e)}get host(){return n(this)}user;isDialogOpen=!1;async open(){this.isDialogOpen=!0}async close(){this.isDialogOpen=!1}closeDialog=()=>{this.isDialogOpen=!1};getDisplayName(){if(this.user)return this.user.displayName??([this.user.firstName,this.user.lastName].filter(Boolean).join(" ")||void 0)}render(){const t=this.getDisplayName();return e(i,{key:"40c1a1bed0ddf02f9835199b5f7d2363e4d1902b"},e("kritzel-dialog",{key:"8d10cd2dbdec06c0519f5a8f6f0f113d30b978aa",dialogTitle:"Account",isOpen:this.isDialogOpen,onDialogClose:this.closeDialog,size:"small"},e("div",{key:"24d8267d37fde77ce1a26efb84a9eaa3320dd6b7",class:"user-info"},e("kritzel-avatar",{key:"282153dea220d8aa4a509764e2dcbcf20a6f2682",user:this.user,size:80}),t&&e("div",{key:"3a908e583a8eb0aca4020eb78d76821b82b1c643",class:"user-name"},t),this.user?.email&&e("div",{key:"2aadf821b6f91c6bd76f10ff234d94ab8b79dd9c",class:"user-email"},this.user.email))))}};ht.style=":host{display:contents}kritzel-dialog{--kritzel-dialog-width-small:380px}.user-info{display:flex;flex-direction:column;align-items:center;gap:8px;padding:8px 0}.user-name{font-size:18px;font-weight:600;color:var(--kritzel-current-user-dialog-name-color, #333333);text-align:center;margin-top:8px}.user-email{font-size:14px;color:var(--kritzel-current-user-dialog-email-color, #666666);text-align:center}";const ut=class{constructor(e){t(this,e)}core;cursorTrailPoints=[];isLeftButtonDown=!1;handleMouseDown(t){"mouse"===t.pointerType&&t.button===p.Left&&(this.isLeftButtonDown=!0,this.cursorTrailPoints=[]),"touch"===t.pointerType&&1===this.core.store.state.pointers.size&&(this.isLeftButtonDown=!0,this.cursorTrailPoints=[])}handlePointerMove(t){if(!this.isLeftButtonDown)return;const e=[{x:t.clientX,y:t.clientY,timestamp:Date.now()},...this.cursorTrailPoints];this.cursorTrailPoints=e.length>this.MAX_TRAIL_POINTS?e.slice(0,this.MAX_TRAIL_POINTS):e}handlePointerUp(t){"mouse"===t.pointerType&&t.button===p.Left&&(this.isLeftButtonDown=!1,this.cursorTrailPoints=[]),"touch"===t.pointerType&&0===this.core.store.state.pointers.size&&(this.isLeftButtonDown=!1,this.cursorTrailPoints=[])}trailCleanupIntervalId;TRAIL_DURATION_MS=100;MAX_TRAIL_POINTS=50;componentDidLoad(){this.trailCleanupIntervalId=window.setInterval((()=>{const t=Date.now(),e=this.cursorTrailPoints.filter((e=>t-e.timestamp<this.TRAIL_DURATION_MS));e.length!==this.cursorTrailPoints.length&&(this.cursorTrailPoints=e)}),50)}disconnectedCallback(){this.trailCleanupIntervalId&&window.clearInterval(this.trailCleanupIntervalId)}render(){return e(i,{key:"2e40e68375f4b8b4531181d249c1638a01d9dac5"},this.cursorTrailPoints.length>1&&e("svg",{key:"c015f003cc5f4c5c532803846fa5201edf4c211a",class:"cursor-trail-svg",xmlns:"http://www.w3.org/2000/svg",style:{position:"absolute",left:"0",top:"0",width:"100%",height:"100%",pointerEvents:"none",opacity:"var(--kritzel-cursor-trail-opacity, 0.6)",zIndex:"9000"}},this.cursorTrailPoints.slice(1).map(((t,i)=>{const r=this.cursorTrailPoints[i],n=Date.now(),o=Math.max(0,Math.min(1,(n-t.timestamp)/this.TRAIL_DURATION_MS));if(o>=1)return null;const s=Math.max(2,15*(1-o));return e("line",{key:`trail-segment-${t.timestamp}`,x1:r.x.toString(),y1:r.y.toString(),x2:t.x.toString(),y2:t.y.toString(),stroke:"var(--kritzel-cursor-trail-color, rgb(228, 228, 228))","stroke-width":s.toString(),"stroke-linecap":"round"})}))))}};ut.style=":host{display:block;position:fixed;top:0;left:0;width:100vw;height:100vh;pointer-events:none;z-index:9000}";class dt{static getNumericValueFromStyle(t,e){const i=window.getComputedStyle(t).getPropertyValue(e);return parseFloat(i)||0}static getScrollableParent(t){if(!t)return window;const e=t.parentNode?.host??t.parentElement;if(!e||"BODY"===e.tagName)return window;const i=window.getComputedStyle(e);return"auto"===i.overflow||"auto"===i.overflowY||"scroll"===i.overflow||"scroll"===i.overflowY?e:this.getScrollableParent(e)}static isElementInViewport(t){if(!t)return!1;const e=this.getScrollableParent(t),i=t.getBoundingClientRect();if(e===window){const t=window.innerHeight||document.documentElement.clientHeight,e=window.innerWidth||document.documentElement.clientWidth;return i.top>=0&&i.left>=0&&i.bottom<=t&&i.right<=e}const r=e.getBoundingClientRect();return i.top>=r.top&&i.left>=r.left&&i.bottom<=r.bottom&&i.right<=r.right}static getFocusableElements(t){if(!t)return[];const e=[],i=t=>{t instanceof HTMLElement&&t.matches('a[href], button:not([disabled]), input:not([disabled]), textarea:not([disabled]), select:not([disabled]), details, [tabindex]:not([tabindex="-1"])')&&!t.hasAttribute("disabled")&&(t=>{const e=window.getComputedStyle(t);return"none"!==e.display&&"hidden"!==e.visibility})(t)&&e.push(t),t.shadowRoot&&Array.from(t.shadowRoot.children).forEach(i),"SLOT"===t.tagName&&t.assignedElements({flatten:!0}).forEach(i),t.shadowRoot||Array.from(t.children).forEach(i)};return i(t),e}}const ft=class{constructor(e){t(this,e),this.dialogOpen=r(this,"dialogOpen"),this.dialogClose=r(this,"dialogClose")}get host(){return n(this)}isOpen=!1;dialogTitle;closable=!0;closeOnBackdrop=!0;closeOnEscape=!0;autoFocus=!0;trapFocus=!0;size="medium";fullscreenOnMobile=!0;isAnimating=!1;mobileLockedHeight=null;dialogOpen;dialogClose;previousOverflow="";previousActiveElement=null;handleIsOpenChange(t){t?this.openDialog():this.closeDialog()}handleKeyDown(t){this.isOpen&&("Escape"===t.key&&this.closeOnEscape&&(t.preventDefault(),t.stopPropagation(),this.emitClose("escape")),"Tab"===t.key&&this.trapFocus&&this.handleTabKey(t))}async open(){this.isOpen||(this.isOpen=!0)}async close(t="programmatic"){this.emitClose(t)}async focusFirstElement(){this.focusFirst()}componentDidLoad(){this.isOpen&&this.openDialog()}disconnectedCallback(){this.restoreBodyScroll()}openDialog(){this.isAnimating=!0,this.previousActiveElement=document.activeElement,this.lockBodyScroll(),this.lockMobileViewportHeight(),this.dialogOpen.emit(),this.autoFocus&&requestAnimationFrame((()=>{this.focusFirst()})),requestAnimationFrame((()=>{this.isAnimating=!1}))}closeDialog(){this.restoreBodyScroll(),this.mobileLockedHeight=null,this.returnFocusToPreviousElement()}emitClose(t){this.dialogClose.emit({reason:t})}lockBodyScroll(){this.previousOverflow=document.body.style.overflow,document.body.style.overflow="hidden"}lockMobileViewportHeight(){this.mobileLockedHeight=!this.fullscreenOnMobile||window.innerWidth>576?null:`${window.innerHeight}px`}restoreBodyScroll(){document.body.style.overflow=this.previousOverflow}returnFocusToPreviousElement(){this.previousActiveElement?.focus&&this.previousActiveElement.focus()}focusFirst(){const t=this.host.shadowRoot?.querySelector(".dialog-content");if(!t)return;const e=[...dt.getFocusableElements(t),...this.getSlottedFocusableElements()];e.length>0?e[0].focus():t.focus()}getSlottedFocusableElements(){const t=this.host.shadowRoot?.querySelectorAll("slot")??[],e=[];return t.forEach((t=>{t.assignedElements({flatten:!0}).forEach((t=>{const i=dt.getFocusableElements(t);e.push(...i)}))})),e}handleTabKey(t){const e=this.getSlottedFocusableElements(),i=this.host.shadowRoot?.querySelector(".close-button");if(i&&this.closable&&e.unshift(i),0===e.length)return;const r=e[0],n=e[e.length-1],o=this.getDeepActiveElement();t.shiftKey?o===r&&(t.preventDefault(),n.focus()):o===n&&(t.preventDefault(),r.focus())}getDeepActiveElement(){let t=document.activeElement;for(;t?.shadowRoot?.activeElement;)t=t.shadowRoot.activeElement;return t}handleBackdropClick=t=>{t.stopPropagation(),this.closeOnBackdrop&&this.emitClose("backdrop")};handleCloseButtonClick=t=>{t.stopPropagation(),this.emitClose("close-button")};handleContentClick=t=>{t.stopPropagation()};renderCloseButton(){return this.closable?e("button",{class:"close-button",type:"button","aria-label":"Close dialog",onClick:this.handleCloseButtonClick},e("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},e("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),e("line",{x1:"6",y1:"6",x2:"18",y2:"18"}))):null}renderHeader(){const t=null!==this.host.querySelector('[slot="header"]'),i=!!this.dialogTitle;return t||i||this.closable?e("div",{class:"dialog-header"},t?e("slot",{name:"header"}):i?e("h2",{class:"dialog-title"},this.dialogTitle):null,this.renderCloseButton()):null}renderFooter(){return null!==this.host.querySelector('[slot="footer"]')?e("div",{class:"dialog-footer"},e("slot",{name:"footer"})):null}render(){return this.isOpen?e(i,null,e("div",{class:{backdrop:!0,"is-animating":this.isAnimating},onClick:this.handleBackdropClick},e("div",{class:{"dialog-content":!0,"is-animating":this.isAnimating,[`size-${this.size}`]:!0,"fullscreen-on-mobile":this.fullscreenOnMobile},style:this.mobileLockedHeight?{height:this.mobileLockedHeight,maxHeight:this.mobileLockedHeight}:void 0,role:"dialog","aria-modal":"true","aria-labelledby":this.dialogTitle?"dialog-title":void 0,tabIndex:-1,onClick:this.handleContentClick},this.renderHeader(),e("div",{class:"dialog-body"},e("slot",null)),this.renderFooter()))):null}static get watchers(){return{isOpen:[{handleIsOpenChange:0}]}}};ft.style=":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-content.fullscreen-on-mobile .dialog-body{display:flex;flex-direction:column}.dialog-content.fullscreen-on-mobile .dialog-body ::slotted(*){flex:1;min-height: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-global-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:active{background-color:var(--kritzel-dialog-close-button-active-background, #ebebeb)}.close-button:focus-visible{outline:revert;outline-offset:revert}.dialog-body{padding:var(--kritzel-dialog-body-padding, 20px);overflow-y:auto;flex:1;min-height:0;scrollbar-color:var(--kritzel-global-scrollbar-thumb-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}";const pt=class{constructor(e){t(this,e),this.valueChanged=r(this,"valueChanged")}get el(){return n(this)}options=[];optionsChanged(){this.updateInternalValue(this.internalValue,!0)}value;externalValueChanged(t){t!==this.internalValue&&this.updateInternalValue(t,!1)}width;selectStyles={};forceOpenDirection;internalValue;hasSuffixContent=!1;hasPrefixContent=!1;isOpen=!1;focusedIndex=-1;openDirection="down";valueChanged;suffixSlotElement;prefixSlotElement;triggerElement;menuElement;wrapperElement;componentWillLoad(){this.updateInternalValue(this.value,!1),this.evaluateSuffixContent(),this.evaluatePrefixContent()}disconnectedCallback(){this.isOpen&&(this.isOpen=!1)}handleDocumentClick(t){this.isOpen&&!this.el.contains(t.target)&&this.closeMenu()}handleDocumentKeydown(t){this.isOpen&&"Escape"===t.key&&(t.stopPropagation(),t.preventDefault(),this.closeMenu(),this.triggerElement?.focus())}updateInternalValue(t,e){let i=t;if(this.options&&this.options.length>0){const t=this.options.some((t=>t.value===i));i&&t||(i=this.options[0].value)}else i=void 0;this.internalValue!==i&&(this.internalValue=i,(e||t!==i&&void 0!==t)&&this.valueChanged.emit(this.internalValue))}toggleMenu=()=>{this.isOpen?this.closeMenu():this.openMenu()};openMenu=()=>{this.calculateMenuDirection(),this.isOpen=!0;const t=this.options.findIndex((t=>t.value===this.internalValue));this.focusedIndex=t>=0?t:0,requestAnimationFrame((()=>{this.menuElement?.focus()}))};calculateMenuDirection=()=>{if(this.forceOpenDirection)return void(this.openDirection=this.forceOpenDirection);if(!this.wrapperElement)return void(this.openDirection="down");const t=this.wrapperElement.getBoundingClientRect(),e=window.innerHeight-t.bottom,i=t.top,r=Math.min(240,36*this.options.length+8);this.openDirection=e<r&&i>e?"up":"down"};closeMenu=()=>{this.isOpen=!1,this.focusedIndex=-1};selectOption=t=>{this.internalValue!==t.value&&(this.internalValue=t.value,this.valueChanged.emit(this.internalValue)),this.closeMenu(),this.triggerElement?.focus()};handleTriggerKeyDown=t=>{switch(t.key){case"Enter":case" ":case"ArrowDown":case"ArrowUp":t.preventDefault(),this.openMenu()}};handleMenuKeyDown=t=>{switch(t.key){case"ArrowDown":t.preventDefault(),this.focusedIndex=Math.min(this.focusedIndex+1,this.options.length-1),this.scrollFocusedOptionIntoView();break;case"ArrowUp":t.preventDefault(),this.focusedIndex=Math.max(this.focusedIndex-1,0),this.scrollFocusedOptionIntoView();break;case"Enter":case" ":t.preventDefault(),this.focusedIndex>=0&&this.focusedIndex<this.options.length&&this.selectOption(this.options[this.focusedIndex]);break;case"Home":t.preventDefault(),this.focusedIndex=0,this.scrollFocusedOptionIntoView();break;case"End":t.preventDefault(),this.focusedIndex=this.options.length-1,this.scrollFocusedOptionIntoView();break;case"Tab":this.closeMenu()}};scrollFocusedOptionIntoView=()=>{!this.menuElement||this.focusedIndex<0||requestAnimationFrame((()=>{const t=this.menuElement?.querySelector(".dropdown-option.is-focused");t&&t.scrollIntoView({block:"nearest",behavior:"smooth"})}))};handleOptionMouseEnter=t=>{this.focusedIndex=t};evaluateSuffixContent=()=>{if(this.suffixSlotElement){const t=this.suffixSlotElement.assignedNodes({flatten:!0}).length>0;this.hasSuffixContent!==t&&(this.hasSuffixContent=t)}else!1!==this.hasSuffixContent&&(this.hasSuffixContent=!1)};evaluatePrefixContent=()=>{if(this.prefixSlotElement){const t=this.prefixSlotElement.assignedNodes({flatten:!0}).length>0;this.hasPrefixContent!==t&&(this.hasPrefixContent=t)}else!1!==this.hasPrefixContent&&(this.hasPrefixContent=!1)};getSelectedLabel(){const t=this.options.find((t=>t.value===this.internalValue));return t?.label??""}getSelectedStyle(){const t=this.options.find((t=>t.value===this.internalValue));return t?.style}render(){const t={"dropdown-trigger":!0,"has-suffix-border":this.hasSuffixContent,"has-prefix-border":this.hasPrefixContent,"is-open":this.isOpen,"open-up":"up"===this.openDirection},r={"dropdown-menu":!0,"is-open":this.isOpen,"open-up":"up"===this.openDirection,"open-down":"down"===this.openDirection};return e(i,{key:"ac4dc8a445f79fa68555756a4ac26ba174a13eaa"},e("div",{key:"1c73835be42e6a289657920ef33c2a53c183913d",class:"dropdown-wrapper",ref:t=>this.wrapperElement=t},e("slot",{key:"ac73d76b5e24e2f2740113523524bc00d1c98d02",name:"prefix",ref:t=>this.prefixSlotElement=t,onSlotchange:this.evaluatePrefixContent}),e("div",{key:"e1e71c68a8abb2cf0dc2b9314e05d1170c0bb5b3",class:"dropdown-container",style:{width:this.width}},e("button",{key:"74588e1ff661f8f86318a2ed9bb53192ad96bacd",type:"button",class:t,style:{...this.selectStyles,...this.getSelectedStyle()},onClick:this.toggleMenu,onKeyDown:this.handleTriggerKeyDown,"aria-haspopup":"listbox","aria-expanded":this.isOpen?"true":"false",ref:t=>this.triggerElement=t},e("span",{key:"432f694526e20e1e6abb6721f12aa246471d830d",class:"dropdown-trigger-label"},this.getSelectedLabel()),e("span",{key:"81f7d98f78201910f4427a7c442172d0283de45b",class:"dropdown-trigger-arrow","aria-hidden":"true"},e("svg",{key:"18db309dc145718fbb3d51e44058e3bfa96b0d27",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},e("polyline",{key:"32af6ce9a1f045c2ce3b205b1b1dc1fe1a80e227",points:"6 9 12 15 18 9"}))))),e("slot",{key:"b37cd43daa06424ea7b7951929352154f7d1ea0f",name:"suffix",ref:t=>this.suffixSlotElement=t,onSlotchange:this.evaluateSuffixContent}),e("ul",{key:"0e673d4e09e007a4c93ed6a992dddeb8eba33e91",class:r,role:"listbox",tabindex:"-1",onKeyDown:this.handleMenuKeyDown,ref:t=>this.menuElement=t},this.options.map(((t,i)=>{const r=t.value===this.internalValue;return e("li",{class:{"dropdown-option":!0,"is-selected":r,"is-focused":i===this.focusedIndex},role:"option","aria-selected":r?"true":"false",style:t.style,onClick:()=>this.selectOption(t),onMouseEnter:()=>this.handleOptionMouseEnter(i)},t.label,r&&e("span",{class:"dropdown-option-check","aria-hidden":"true"},e("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},e("polyline",{points:"20 6 9 17 4 12"}))))})))))}static get watchers(){return{options:[{optionsChanged:0}],value:[{externalValueChanged:0}]}}};pt.style=":host{display:inline-flex;vertical-align:middle;width:100%;position:relative}.dropdown-wrapper{display:flex;align-items:center;border:1px solid var(--kritzel-dropdown-border-color, #ebebeb);border-radius:6px;overflow:visible;height:38px;width:100%;position:relative}.dropdown-wrapper:hover:not(:focus-within){border-color:var(--kritzel-dropdown-hover-border-color, #cccccc)}.dropdown-container{flex:1;height:100%;min-width:0}.dropdown-trigger{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:0 8px;height:100%;width:100%;box-sizing:border-box;border-radius:6px;border:none;background-color:var(--kritzel-dropdown-background, #ffffff);cursor:var(--kritzel-global-pointer-cursor, pointer);outline:none;font-size:inherit;font-family:inherit;color:var(--kritzel-dropdown-text-color, #333333);-webkit-tap-highlight-color:transparent;text-align:left}.dropdown-trigger:focus-visible{outline:revert}.dropdown-trigger.has-suffix-border{border-right:1px solid var(--kritzel-global-border-color, #ebebeb);border-top-right-radius:0;border-bottom-right-radius:0}.dropdown-trigger.has-prefix-border{border-left:1px solid var(--kritzel-global-border-color, #ebebeb);border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-trigger-label{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.dropdown-trigger-arrow{display:flex;align-items:center;justify-content:center;width:16px;height:16px;flex-shrink:0;transition:transform 0.2s ease}.dropdown-trigger-arrow svg{width:100%;height:100%}.dropdown-trigger.is-open .dropdown-trigger-arrow{transform:rotate(180deg)}.dropdown-trigger.is-open.open-up .dropdown-trigger-arrow{transform:rotate(0deg)}.dropdown-menu{position:absolute;left:0;right:0;margin:0;padding:4px 0;list-style:none;background-color:var(--kritzel-dropdown-background, #ffffff);border:1px solid var(--kritzel-global-border-color, #ebebeb);border-radius:6px;box-shadow:var(--kritzel-controls-box-shadow, 0 4px 12px rgba(0, 0, 0, 0.15));z-index:1000;max-height:240px;overflow-y:auto;opacity:0;visibility:hidden;transition:opacity 0.15s ease, transform 0.15s ease, visibility 0.15s;outline:none}.dropdown-menu.open-down{top:calc(100% + 4px);bottom:auto;transform:translateY(-8px)}.dropdown-menu.open-up{bottom:calc(100% + 4px);top:auto;transform:translateY(8px)}.dropdown-menu.is-open{opacity:1;visibility:inherit;transform:translateY(0)}.dropdown-menu.open-up{box-shadow:var(--kritzel-controls-box-shadow, 0 -4px 12px rgba(0, 0, 0, 0.15))}.dropdown-option{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 12px;cursor:var(--kritzel-global-pointer-cursor, pointer);color:var(--kritzel-dropdown-text-color, #333333);transition:background-color 0.1s ease;-webkit-tap-highlight-color:transparent}.dropdown-option.is-focused{background-color:var(--kritzel-dropdown-hover-background-color, #f0f0f0)}.dropdown-option.is-selected{font-weight:600;background-color:var(--kritzel-dropdown-selected-background-color, #007bff1a)}.dropdown-option-check{display:flex;align-items:center;justify-content:center;width:16px;height:16px;flex-shrink:0;color:var(--kritzel-dropdown-accent-color, #007bff)}.dropdown-option-check svg{width:100%;height:100%}.dropdown-menu{scrollbar-color:var(--kritzel-global-scrollbar-thumb-color, #ebebeb) transparent;scrollbar-width:thin}::slotted(*){height:100%;box-sizing:border-box}";const bt={shapeType:g.Rectangle,fillColor:{light:"transparent",dark:"transparent"},strokeColor:b[0],strokeWidth:4,fontColor:b[0],fontSize:16,fontFamily:"Arial",palette:[...b]},gt=1e3,vt=1e-4,kt={providers:[v]},mt=class{constructor(e){t(this,e),this.isReady=r(this,"isReady"),this.activeWorkspaceChange=r(this,"activeWorkspaceChange"),this.objectsChange=r(this,"objectsChange"),this.objectsAdded=r(this,"objectsAdded"),this.objectsRemoved=r(this,"objectsRemoved"),this.objectsUpdated=r(this,"objectsUpdated"),this.undoStateChange=r(this,"undoStateChange"),this.themeChange=r(this,"themeChange"),this.viewportChange=r(this,"viewportChange"),this.logout=r(this,"logout"),this.login=r(this,"login"),this.isPublicChange=r(this,"isPublicChange"),this.awarenessChange=r(this,"awarenessChange")}get host(){return n(this)}scaleMax=gt;scaleMin=vt;lockDrawingScale=!0;viewportBoundaryLeft=-1/0;viewportBoundaryRight=1/0;viewportBoundaryTop=-1/0;viewportBoundaryBottom=1/0;wheelEnabled=!0;debugInfo={showViewportInfo:!1,showObjectInfo:!1,showSyncProviderInfo:!0,showMigrationInfo:!0};user;activeUsers;controls=[{name:"selection",type:"tool",isDefault:!0,tool:l,icon:"cursor"},{name:"brush",type:"tool",tool:c,icon:"pen",config:k},{name:"eraser",type:"tool",tool:m,icon:"eraser"},{name:"line",type:"tool",tool:h,icon:"arrow",config:y},{name:"shape",type:"tool",tool:u,icon:"shape-rectangle",config:bt,subOptions:[{id:"rectangle",icon:"shape-rectangle",label:"Rectangle",value:g.Rectangle,toolProperty:"shapeType"},{id:"ellipse",icon:"shape-ellipse",label:"Ellipse",value:g.Ellipse,toolProperty:"shapeType"},{id:"triangle",icon:"shape-triangle",label:"Triangle",value:g.Triangle,toolProperty:"shapeType"}]},{name:"text",type:"tool",tool:d,icon:"type",config:w},{name:"image",type:"tool",tool:x,icon:"image"},{name:"config",type:"config"}];globalContextMenuItems=[{label:"Paste",icon:"paste",disabled:async()=>0===(await this.engineRef.getCopiedObjects()).length,action:t=>this.engineRef.paste(t.x,t.y)},{label:"Select All",icon:"select-all",disabled:async()=>0===(await this.engineRef.getObjectsInViewport()).length,action:()=>this.selectAllObjectsInViewport()}];objectContextMenuItems=[{label:"Copy",icon:"copy",group:"clipboard",action:()=>this.engineRef.copy()},{label:"Cut",icon:"cut",group:"clipboard",action:()=>this.engineRef.cut()},{label:"Paste",icon:"paste",group:"clipboard",disabled:async()=>0===(await this.engineRef.getCopiedObjects()).length,action:t=>this.engineRef.paste(t.x,t.y)},{label:"Order",icon:"ordering",group:"other",children:[{label:"Bring to Front",icon:"bring-to-front",action:()=>this.engineRef.bringToFront()},{label:"Send to Back",icon:"send-to-back",action:()=>this.engineRef.sendToBack()},{label:"Move Up",icon:"arrow-up-from-dot",action:()=>this.engineRef.bringForward()},{label:"Move Down",icon:"arrow-down-from-dot",action:()=>this.engineRef.sendBackward()}]},{label:"Align",icon:"align",group:"other",disabled:async()=>(await this.engineRef.getSelectedObjects()).length<2,children:[{label:"Align Left",icon:"align-start-vertical",action:()=>this.engineRef.alignObjects(z.StartHorizontal)},{label:"Align Center Horizontally",icon:"align-center-horizontal",action:()=>this.engineRef.alignObjects(z.CenterHorizontal)},{label:"Align Right",icon:"align-end-vertical",action:()=>this.engineRef.alignObjects(z.EndHorizontal)},{label:"Align Top",icon:"align-start-horizontal",action:()=>this.engineRef.alignObjects(z.StartVertical)},{label:"Align Center Vertically",icon:"align-center-vertical",action:()=>this.engineRef.alignObjects(z.CenterVertical)},{label:"Align Bottom",icon:"align-end-horizontal",action:()=>this.engineRef.alignObjects(z.EndVertical)}]},{label:"Group",icon:"group",group:"other",children:[{label:"Group",icon:"group",disabled:async()=>(await this.engineRef.getSelectedObjects()).length<2,action:()=>this.engineRef.group()},{label:"Ungroup",icon:"ungroup",disabled:async()=>!(await this.engineRef.getSelectedObjects()).some((t=>"KritzelGroup"===t.__class__)),action:()=>this.engineRef.ungroup()}]},{label:"Export",icon:"download",group:"export",children:[{label:"Export as SVG",icon:"download",action:()=>this.engineRef.exportSelectedObjectsAsSvg()},{label:"Export as PNG",icon:"download",action:()=>this.engineRef.exportSelectedObjectsAsPng()}]},{label:"Delete",icon:"delete",group:"edit",action:()=>this.engineRef.delete()}];customSvgIcons={};isControlsVisible=!0;isUtilityPanelVisible=!0;isWorkspaceManagerVisible=!0;isMoreMenuVisible=!0;syncConfig=kt;assetStorageConfig=C;cursorTarget;loginConfig={providers:[{label:"Sign in with Google",icon:"google",name:"Google"}]};isLoading=!1;editorId;activeWorkspaceId;isReady;activeWorkspaceChange;objectsChange;objectsAdded;objectsRemoved;objectsUpdated;undoStateChange;themeChange;viewportChange;logout;login;isPublicChange;awarenessChange;isEngineReady=!1;isControlsReady=!1;isWorkspaceManagerReady=!1;workspaces=[];activeWorkspace;isVirtualKeyboardOpen=!1;undoState=null;isBackToContentButtonVisible=!1;currentTheme="light";shortcuts=[];currentIsPublic=!1;onIsEngineReady(t){t&&this.isControlsReady&&this.checkIsReady()}onIsControlsReady(t){t&&this.isEngineReady&&this.checkIsReady()}onWorkspacesChange(t){const e=this.activeWorkspace;if(e){const i=t.find((t=>t.id===e.id));i&&i!==e&&(this.activeWorkspace=i)}if(this.activeWorkspaceId){const e=t.find((t=>t.id===this.activeWorkspaceId));e&&e!==this.activeWorkspace&&(this.activeWorkspace=e)}}onActiveWorkspaceChange(){this.updateCurrentIsPublic()}onActiveWorkspaceIdChange(t){if(!t)return;if(0===this.workspaces.length)return;const e=this.workspaces.find((e=>e.id===t));e?e!==this.activeWorkspace&&(this.activeWorkspace=e):console.warn(`[KritzelEditor] No workspace found with ID: ${t}`)}onCurrentThemeChange(){setTimeout((()=>this.setOsSpecificCssVariables()),0)}onTouchStart(t){t.cancelable&&t.preventDefault()}async getObjectById(t){return this.engineRef.getObjectById(t)}async addObject(t){return this.engineRef.addObject(t)}async updateObject(t,e){return this.engineRef.updateObject(t,e)}async removeObject(t){return this.engineRef.removeObject(t)}async getSelectedObjects(){return this.engineRef.getSelectedObjects()}async selectObjects(t){return this.engineRef.selectObjects(t)}async selectAllObjectsInViewport(){return this.engineRef.selectAllObjectsInViewport()}async clearSelection(){this.engineRef.clearSelection()}async centerObjectInViewport(t){return this.engineRef.centerObjectInViewport(t)}async backToContent(){return this.engineRef.backToContent()}async centerAllObjects(t=!0){return this.engineRef.centerAllObjects(t)}async setViewport(t,e,i){return this.engineRef.setViewport(t,e,i)}async panTo(t,e){return this.engineRef.panTo(t,e)}async zoomTo(t,e,i){return this.engineRef.zoomTo(t,e,i)}async getViewport(){return this.engineRef.getViewport()}async screenToWorld(t,e){return this.engineRef.screenToWorld(t,e)}async worldToScreen(t,e){return this.engineRef.worldToScreen(t,e)}async createWorkspace(t){return this.engineRef.createWorkspace(t)}async updateWorkspace(t){return this.engineRef.updateWorkspace(t)}async deleteWorkspace(t){return this.engineRef.deleteWorkspace(t)}async getWorkspaces(){return this.engineRef.getWorkspaces()}async getActiveWorkspace(){return this.engineRef.getActiveWorkspace()}async loadSharedWorkspace(t){return this.engineRef.loadSharedWorkspace(t)}async reinitSync(){return this.engineRef.reinitSync()}async registerTool(t,e,i){return this.engineRef.registerTool(t,e,i)}async changeActiveTool(t){return this.engineRef.changeActiveTool(t)}async disable(){return this.engineRef.disable()}async enable(){return this.engineRef.enable()}async copy(){return this.engineRef.copy()}async cut(){return this.engineRef.cut()}async paste(t,e){return this.engineRef.paste(t,e)}async delete(){return this.engineRef.delete()}async bringForward(t){return this.engineRef.bringForward(t)}async sendBackward(t){return this.engineRef.sendBackward(t)}async bringToFront(t){return this.engineRef.bringToFront(t)}async sendToBack(t){return this.engineRef.sendToBack(t)}async alignObjects(t){return this.engineRef.alignObjects(t)}async group(){return this.engineRef.group()}async ungroup(){return this.engineRef.ungroup()}async undo(){return this.engineRef.undo()}async redo(){return this.engineRef.redo()}async getScreenshot(t="png"){return this.engineRef.getScreenshot(t)}async exportViewportAsPng(){return this.engineRef.exportViewportAsPng()}async exportViewportAsSvg(){return this.engineRef.exportViewportAsSvg()}async downloadAsJson(t){return this.engineRef.downloadAsJson(t)}async importFromFile(){return this.engineRef.importFromFile()}async loadObjectsFromJson(t){return this.engineRef.loadObjectsFromJson(t)}async getObjectsTotalCount(){return this.engineRef.getObjectsTotalCount()}async getAllObjects(){return this.engineRef.getAllObjects()}async findObjects(t){return this.engineRef.findObjects(t)}async getCopiedObjects(){return this.engineRef.getCopiedObjects()}async getObjectsInViewport(){return this.engineRef.getObjectsInViewport()}async hideContextMenu(){return this.engineRef.hideContextMenu()}async triggerSelectionChange(){return this.engineRef.triggerSelectionChange()}async getDisplayableShortcuts(){return this.engineRef.getDisplayableShortcuts()}engineRef;controlsRef;settingsRef;exportRef;splitButtonRef;shareDialogRef;loginDialogRef;componentWillLoad(){this.loadSettingsFromStorage()}componentDidLoad(){this.registerCustomSvgIcons(),this.listenForMobileKeyboard(),this.setOsSpecificCssVariables()}async checkIsReady(){if(await customElements.whenDefined("kritzel-editor"),await customElements.whenDefined("kritzel-workspace-manager"),await customElements.whenDefined("kritzel-controls"),await customElements.whenDefined("kritzel-engine"),!(this.isEngineReady&&this.isControlsReady&&this.isWorkspaceManagerReady&&this.activeWorkspace))return;const{id:t,name:e,isPublic:i,createdAt:r,updatedAt:n}=this.activeWorkspace;this.isReady.emit({host:this.host,activeWorkspace:{id:t,name:e,isPublic:i,createdAt:r,updatedAt:n},syncConfig:this.syncConfig,assetStorageConfig:this.assetStorageConfig,loginConfig:this.loginConfig})}async onEngineReady(t){this.isEngineReady=!0,t.detail.activeWorkspace&&(this.activeWorkspace=t.detail.activeWorkspace,this.workspaces=t.detail.workspaces,this.currentIsPublic=await this.engineRef.getIsPublic(),this.loadShortcuts())}handleWorkspacesChange(t){this.workspaces=t.detail}handleActiveWorkspaceChange(t){if(t.stopPropagation(),this.activeWorkspace=t.detail,!this.isEngineReady)return;const{id:e,name:i,isPublic:r,createdAt:n,updatedAt:o}=this.activeWorkspace;this.activeWorkspaceChange.emit({id:e,name:i,isPublic:r,createdAt:n,updatedAt:o})}handleObjectsChange(t){this.objectsChange.emit(t.detail)}handleObjectsAdded(t){this.objectsAdded.emit(t.detail)}handleObjectsRemoved(t){this.objectsRemoved.emit(t.detail)}handleObjectsUpdated(t){this.objectsUpdated.emit(t.detail)}handleUndoStateChange(t){this.undoStateChange.emit(t.detail),this.undoState=t.detail}async handleObjectsInViewportChange(t){const e=this.getContentObjects(t.detail).length>0,i=this.getContentObjects(await this.engineRef.getAllObjects()).length>0;this.isBackToContentButtonVisible=!e&&i}handleViewportChange(t){this.viewportChange.emit(t.detail)}handleAwarenessChange(t){this.awarenessChange.emit(t.detail)}handleSettingsChange(t){this.scaleMin=t.detail.scaleMin,this.scaleMax=t.detail.scaleMax,this.lockDrawingScale=t.detail.lockDrawingScale,this.currentTheme=t.detail.theme,this.viewportBoundaryLeft=t.detail.viewportBoundaryLeft??-1/0,this.viewportBoundaryRight=t.detail.viewportBoundaryRight??1/0,this.viewportBoundaryTop=t.detail.viewportBoundaryTop??-1/0,this.viewportBoundaryBottom=t.detail.viewportBoundaryBottom??1/0,this.debugInfo=t.detail.debugInfo,this.themeChange.emit(t.detail.theme)}get moreMenuItems(){return[{id:"share",label:"Share",icon:"share",action:()=>{this.isLoggedIn||!this.loginConfig?this.shareDialogRef.open():this.openLoginDialog()}},{id:"export",label:"Export",icon:"upload",action:async()=>{const t=await this.engineRef.getScreenshot("png");this.exportRef.open(t??void 0)}},{id:"import",label:"Import",icon:"download",action:()=>this.engineRef.importFromFile()},{id:"settings",label:"Settings",icon:"settings",action:()=>this.settingsRef.open()},{id:"logout",label:"Logout",icon:"log-out",color:"#ff3b30",isVisible:this.isLoggedIn,action:()=>this.logout.emit()}]}handleToggleIsPublic=async t=>{const e=t.detail,i=await this.engineRef.getActiveWorkspace();i.isPublic=e,await this.engineRef.updateWorkspace(i),this.activeWorkspace=i.clone(),this.isPublicChange.emit({isPublic:e,workspaceId:i.id})};updateCurrentIsPublic(){const t=this.activeWorkspace?.isPublic??!1,e=this.activeWorkspace?.id;this.currentIsPublic=t,e&&this.isPublicChange.emit({isPublic:t,workspaceId:e})}handleProviderLogin=t=>{this.login.emit(t.detail)};get isLoggedIn(){return!!this.user&&!this.user.isGuest}async openLoginDialog(){this.loginDialogRef?.open()}async setLoginLoading(t){this.loginDialogRef?.setLoading(t)}getSettingsStorageKey(){return this.editorId?`kritzel-settings-${this.editorId}`:"kritzel-settings"}loadSettingsFromStorage(){const t=localStorage.getItem(this.getSettingsStorageKey());if(t)try{const e=JSON.parse(t);"number"==typeof e.scaleMin&&(this.scaleMin=e.scaleMin),"number"==typeof e.scaleMax&&(this.scaleMax=e.scaleMax),"boolean"==typeof e.lockDrawingScale&&(this.lockDrawingScale=e.lockDrawingScale),"light"!==e.theme&&"dark"!==e.theme||(this.currentTheme=e.theme),"number"==typeof e.viewportBoundaryLeft&&(this.viewportBoundaryLeft=e.viewportBoundaryLeft),"number"==typeof e.viewportBoundaryRight&&(this.viewportBoundaryRight=e.viewportBoundaryRight),"number"==typeof e.viewportBoundaryTop&&(this.viewportBoundaryTop=e.viewportBoundaryTop),"number"==typeof e.viewportBoundaryBottom&&(this.viewportBoundaryBottom=e.viewportBoundaryBottom),e.debugInfo&&(this.debugInfo={...this.debugInfo,...e.debugInfo})}catch{}}async loadShortcuts(){this.shortcuts=await this.engineRef.getDisplayableShortcuts()}getContentObjects(t){return t.filter((t=>!(t instanceof S||t instanceof I)))}registerCustomSvgIcons(){for(const[t,e]of Object.entries(this.customSvgIcons))$.register(t,e)}listenForMobileKeyboard(){M.onKeyboardVisibleChanged((t=>{this.isVirtualKeyboardOpen=t}))}setOsSpecificCssVariables(){switch(f.detectOS()){case"iOS":this.host.style.setProperty("--kritzel-editor-top-left-buttons-top","14px"),this.host.style.setProperty("--kritzel-editor-top-left-buttons-left","14px"),this.host.style.setProperty("--kritzel-editor-controls-bottom","14px"),this.host.style.setProperty("--kritzel-editor-controls-transition","cubic-bezier(0.25, 0.1, 0.25, 1.0)"),this.host.style.setProperty("--kritzel-editor-controls-transform","translateY(200%)"),this.host.style.setProperty("--kritzel-editor-controls-transition-duration","0.25s");break;case"Android":this.host.style.setProperty("--kritzel-editor-top-left-buttons-top","14px"),this.host.style.setProperty("--kritzel-editor-top-left-buttons-left","14px"),this.host.style.setProperty("--kritzel-editor-controls-bottom","24px"),this.host.style.setProperty("--kritzel-editor-controls-transition","cubic-bezier(0.25, 0.1, 0.25, 1.0)"),this.host.style.setProperty("--kritzel-editor-controls-transform","translateY(200%)"),this.host.style.setProperty("--kritzel-editor-controls-transition-duration","0.25s");break;default:this.host.style.setProperty("--kritzel-editor-top-left-buttons-top","14px"),this.host.style.setProperty("--kritzel-editor-top-left-buttons-left","14px"),this.host.style.setProperty("--kritzel-editor-controls-bottom","14px")}}render(){const t=this.isLoggedIn,r=t,n=!!this.loginConfig&&!t;return e(i,{key:"6e832b0036dbc0d36aa70b297cf73cceafbaa846"},e("div",{key:"48e99e354326781792798fdcc2b07a1b5bbc8cca",class:"top-left-buttons"},e("kritzel-workspace-manager",{key:"980bf87558891a8b20030be4b6d0c32ee568ca4d",visible:this.isWorkspaceManagerVisible,workspaces:this.workspaces,activeWorkspace:this.activeWorkspace,onWorkspaceChange:t=>this.activeWorkspace=t.detail,onIsWorkspaceManagerReady:()=>this.isWorkspaceManagerReady=!0}),e("kritzel-back-to-content",{key:"59636e148d71c54e51f17095dfec2754d63f1692",visible:this.isBackToContentButtonVisible,onBackToContent:()=>this.backToContent()})),e("kritzel-engine",{key:"11f17eef609d3d3ece1ead3cf51524e690f4a2eb",ref:t=>{t&&(this.engineRef=t)},workspace:this.activeWorkspace,activeWorkspaceId:this.activeWorkspaceId,editorId:this.editorId,syncConfig:this.syncConfig,assetStorageConfig:this.assetStorageConfig,user:this.user,scaleMax:this.scaleMax,lockDrawingScale:this.lockDrawingScale,scaleMin:this.scaleMin,cursorTarget:this.cursorTarget,isLoading:this.isLoading,viewportBoundaryLeft:this.viewportBoundaryLeft,viewportBoundaryRight:this.viewportBoundaryRight,viewportBoundaryTop:this.viewportBoundaryTop,viewportBoundaryBottom:this.viewportBoundaryBottom,wheelEnabled:this.wheelEnabled,theme:this.currentTheme,debugInfo:this.debugInfo,globalContextMenuItems:this.globalContextMenuItems,objectContextMenuItems:this.objectContextMenuItems,onIsEngineReady:t=>this.onEngineReady(t),onWorkspacesChange:t=>this.handleWorkspacesChange(t),onActiveWorkspaceChange:t=>this.handleActiveWorkspaceChange(t),onObjectsChange:t=>this.handleObjectsChange(t),onObjectsAdded:t=>this.handleObjectsAdded(t),onObjectsRemoved:t=>this.handleObjectsRemoved(t),onObjectsUpdated:t=>this.handleObjectsUpdated(t),onUndoStateChange:t=>this.handleUndoStateChange(t),onObjectsInViewportChange:t=>this.handleObjectsInViewportChange(t),onViewportChange:t=>this.handleViewportChange(t),onAwarenessChange:t=>this.handleAwarenessChange(t)}),e("kritzel-controls",{key:"b9852a78ed062ca7026b8d0da44263fb0a64d8cc",class:{"keyboard-open":this.isVirtualKeyboardOpen},style:{display:this.isControlsVisible?"flex":"none"},ref:t=>{t&&(this.controlsRef=t)},controls:this.controls,isUtilityPanelVisible:this.isUtilityPanelVisible,undoState:this.undoState??void 0,theme:this.currentTheme,onIsControlsReady:()=>this.isControlsReady=!0}),e("div",{key:"f3e33d794033eb5fdbde8c4553c744da61eefc51",class:"top-right-buttons"},e("kritzel-settings",{key:"466ac8a5d110feb46472c3207f4a73e9ce37e148",ref:t=>{t&&(this.settingsRef=t)},shortcuts:this.shortcuts,editorId:this.editorId,onSettingsChange:t=>this.handleSettingsChange(t)}),e("kritzel-export",{key:"c6e0eca3baca940f9160ca02989d5c27410ccc59",ref:t=>{t&&(this.exportRef=t)},workspaceName:this.activeWorkspace?.name||"workspace",onExportPng:()=>this.engineRef.exportViewportAsPng(),onExportSvg:()=>this.engineRef.exportViewportAsSvg(),onExportJson:t=>this.engineRef.downloadAsJson(t.detail)}),e("kritzel-active-users",{key:"b66a7736b9ac0942873e5bdc1677228cd53d57d6",users:this.activeUsers}),r&&e("kritzel-current-user",{key:"4ab0b49bd43f428fb1ade5d5d9836d846355d92f",user:this.user}),n&&e("kritzel-button",{key:"04d6d43b60ad1bd3272dfb1e09aa3efb9602c42e",onButtonClick:()=>this.loginDialogRef?.open()},"Sign in"),e("kritzel-more-menu",{key:"7ca482736a2253d95dffc369de1db1d14d207c35",items:this.moreMenuItems,visible:this.isMoreMenuVisible}),e("kritzel-share-dialog",{key:"c5ae3f2e981d980fd35380424036acdc29b0fe53",ref:t=>{t&&(this.shareDialogRef=t)},isPublic:this.currentIsPublic,workspaceId:this.activeWorkspace?.id,onToggleIsPublic:this.handleToggleIsPublic}),this.loginConfig&&e("kritzel-login-dialog",{key:"f72b412715d0ffd9a8038ade192d894623fc98fc",ref:t=>{t&&(this.loginDialogRef=t)},providers:this.loginConfig.providers,dialogTitle:this.loginConfig.title,subtitle:this.loginConfig.subtitle,onProviderLogin:this.handleProviderLogin})))}static get watchers(){return{isEngineReady:[{onIsEngineReady:0}],isControlsReady:[{onIsControlsReady:0}],workspaces:[{onWorkspacesChange:0}],activeWorkspace:[{onActiveWorkspaceChange:0}],activeWorkspaceId:[{onActiveWorkspaceIdChange:0}],currentTheme:[{onCurrentThemeChange:0}]}}};mt.style="kritzel-editor{display:flex;margin:0;position:relative;overflow:hidden;width:100%;height:100%;align-items:center;justify-content:center;touch-action:manipulation;user-select:none;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}kritzel-controls{position:absolute;bottom:var(--kritzel-editor-controls-bottom, 14px);transition:transform var(--kritzel-editor-controls-transition-duration, 0.1s) var(--kritzel-editor-controls-transition, ease-in-out)}kritzel-controls.keyboard-open{transform:var(--kritzel-editor-controls-transform, translateY(300%))}.top-left-buttons{position:absolute;top:var(--kritzel-editor-top-left-buttons-top, 14px);left:var(--kritzel-editor-top-left-buttons-left, 14px);display:flex;align-items:flex-start;gap:8px;z-index:10000}.top-right-buttons{position:absolute;top:var(--kritzel-editor-top-right-buttons-top, 14px);right:var(--kritzel-editor-top-right-buttons-right, 14px);display:flex;align-items:center;gap:8px;z-index:10000}.top-right-button{display:flex;align-items:center;justify-content:center;width:50px;height:50px;padding:0;border:var(--kritzel-split-button-border, 1px solid #ebebeb);border-radius:var(--kritzel-split-button-border-radius, 12px);background-color:var(--kritzel-split-button-background-color, #ffffff);cursor:var(--kritzel-global-pointer-cursor, pointer);box-shadow:var(--kritzel-split-button-box-shadow, 0 0 3px rgba(0, 0, 0, 0.08));transition:background-color 150ms ease;-webkit-tap-highlight-color:transparent}.top-right-button:hover{background-color:#f5f5f5}.top-right-button:active{background-color:#ebebeb}";var yt,wt,xt,zt={exports:{}},Ct=(yt||(yt=1,wt=zt,xt=zt.exports,function(){var t,e="Expected a function",i="__lodash_hash_undefined__",r="__lodash_placeholder__",n=32,o=128,s=1/0,a=9007199254740991,l=NaN,c=4294967295,h=[["ary",o],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",n],["partialRight",64],["rearg",256]],u="[object Arguments]",d="[object Array]",f="[object Boolean]",p="[object Date]",b="[object Error]",g="[object Function]",v="[object GeneratorFunction]",k="[object Map]",m="[object Number]",y="[object Object]",w="[object Promise]",x="[object RegExp]",z="[object Set]",C="[object String]",S="[object Symbol]",I="[object WeakMap]",$="[object ArrayBuffer]",M="[object DataView]",j="[object Float32Array]",T="[object Float64Array]",A="[object Int8Array]",_="[object Int16Array]",O="[object Int32Array]",E="[object Uint8Array]",D="[object Uint8ClampedArray]",F="[object Uint16Array]",L="[object Uint32Array]",R=/\b__p \+= '';/g,W=/\b(__p \+=) '' \+/g,P=/(__e\(.*?\)|\b__t\)) \+\n'';/g,B=/&(?:amp|lt|gt|quot|#39);/g,V=/[&<>"']/g,U=RegExp(B.source),N=RegExp(V.source),K=/<%-([\s\S]+?)%>/g,H=/<%([\s\S]+?)%>/g,G=/<%=([\s\S]+?)%>/g,Y=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,q=/^\w*$/,X=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Z=/[\\^$.*+?()[\]{}|]/g,Q=RegExp(Z.source),tt=/^\s+/,et=/\s/,it=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,rt=/\{\n\/\* \[wrapped with (.+)\] \*/,nt=/,? & /,ot=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,st=/[()=,{}\[\]\/\s]/,at=/\\(\\)?/g,lt=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,ct=/\w*$/,ht=/^[-+]0x[0-9a-f]+$/i,ut=/^0b[01]+$/i,dt=/^\[object .+?Constructor\]$/,ft=/^0o[0-7]+$/i,pt=/^(?:0|[1-9]\d*)$/,bt=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,gt=/($^)/,vt=/['\n\r\u2028\u2029\\]/g,kt="\\ud800-\\udfff",mt="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",yt="\\u2700-\\u27bf",zt="a-z\\xdf-\\xf6\\xf8-\\xff",Ct="A-Z\\xc0-\\xd6\\xd8-\\xde",St="\\ufe0e\\ufe0f",It="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",$t="["+kt+"]",Mt="["+It+"]",jt="["+mt+"]",Tt="\\d+",At="["+yt+"]",_t="["+zt+"]",Ot="[^"+kt+It+Tt+yt+zt+Ct+"]",Et="\\ud83c[\\udffb-\\udfff]",Dt="[^"+kt+"]",Ft="(?:\\ud83c[\\udde6-\\uddff]){2}",Lt="[\\ud800-\\udbff][\\udc00-\\udfff]",Rt="["+Ct+"]",Wt="\\u200d",Pt="(?:"+_t+"|"+Ot+")",Bt="(?:"+Rt+"|"+Ot+")",Vt="(?:['’](?:d|ll|m|re|s|t|ve))?",Ut="(?:['’](?:D|LL|M|RE|S|T|VE))?",Nt="(?:"+jt+"|"+Et+")?",Kt="["+St+"]?",Ht=Kt+Nt+"(?:"+Wt+"(?:"+[Dt,Ft,Lt].join("|")+")"+Kt+Nt+")*",Gt="(?:"+[At,Ft,Lt].join("|")+")"+Ht,Yt="(?:"+[Dt+jt+"?",jt,Ft,Lt,$t].join("|")+")",qt=RegExp("['’]","g"),Xt=RegExp(jt,"g"),Zt=RegExp(Et+"(?="+Et+")|"+Yt+Ht,"g"),Jt=RegExp([Rt+"?"+_t+"+"+Vt+"(?="+[Mt,Rt,"$"].join("|")+")",Bt+"+"+Ut+"(?="+[Mt,Rt+Pt,"$"].join("|")+")",Rt+"?"+Pt+"+"+Vt,Rt+"+"+Ut,"\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",Tt,Gt].join("|"),"g"),Qt=RegExp("["+Wt+kt+mt+St+"]"),te=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,ee=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],ie=-1,re={};re[j]=re[T]=re[A]=re[_]=re[O]=re[E]=re[D]=re[F]=re[L]=!0,re[u]=re[d]=re[$]=re[f]=re[M]=re[p]=re[b]=re[g]=re[k]=re[m]=re[y]=re[x]=re[z]=re[C]=re[I]=!1;var ne={};ne[u]=ne[d]=ne[$]=ne[M]=ne[f]=ne[p]=ne[j]=ne[T]=ne[A]=ne[_]=ne[O]=ne[k]=ne[m]=ne[y]=ne[x]=ne[z]=ne[C]=ne[S]=ne[E]=ne[D]=ne[F]=ne[L]=!0,ne[b]=ne[g]=ne[I]=!1;var oe={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},se=parseFloat,ae=parseInt,le="object"==typeof J&&J&&J.Object===Object&&J,ce="object"==typeof self&&self&&self.Object===Object&&self,he=le||ce||Function("return this")(),ue=xt&&!xt.nodeType&&xt,de=ue&&wt&&!wt.nodeType&&wt,fe=de&&de.exports===ue,pe=fe&&le.process,be=function(){try{return de&&de.require&&de.require("util").types||pe&&pe.binding&&pe.binding("util")}catch(t){}}(),ge=be&&be.isArrayBuffer,ve=be&&be.isDate,ke=be&&be.isMap,me=be&&be.isRegExp,ye=be&&be.isSet,we=be&&be.isTypedArray;function xe(t,e,i){switch(i.length){case 0:return t.call(e);case 1:return t.call(e,i[0]);case 2:return t.call(e,i[0],i[1]);case 3:return t.call(e,i[0],i[1],i[2])}return t.apply(e,i)}function ze(t,e,i,r){for(var n=-1,o=null==t?0:t.length;++n<o;){var s=t[n];e(r,s,i(s),t)}return r}function Ce(t,e){for(var i=-1,r=null==t?0:t.length;++i<r&&!1!==e(t[i],i,t););return t}function Se(t,e){for(var i=null==t?0:t.length;i--&&!1!==e(t[i],i,t););return t}function Ie(t,e){for(var i=-1,r=null==t?0:t.length;++i<r;)if(!e(t[i],i,t))return!1;return!0}function $e(t,e){for(var i=-1,r=null==t?0:t.length,n=0,o=[];++i<r;){var s=t[i];e(s,i,t)&&(o[n++]=s)}return o}function Me(t,e){return!(null==t||!t.length)&&Re(t,e,0)>-1}function je(t,e,i){for(var r=-1,n=null==t?0:t.length;++r<n;)if(i(e,t[r]))return!0;return!1}function Te(t,e){for(var i=-1,r=null==t?0:t.length,n=Array(r);++i<r;)n[i]=e(t[i],i,t);return n}function Ae(t,e){for(var i=-1,r=e.length,n=t.length;++i<r;)t[n+i]=e[i];return t}function _e(t,e,i,r){var n=-1,o=null==t?0:t.length;for(r&&o&&(i=t[++n]);++n<o;)i=e(i,t[n],n,t);return i}function Oe(t,e,i,r){var n=null==t?0:t.length;for(r&&n&&(i=t[--n]);n--;)i=e(i,t[n],n,t);return i}function Ee(t,e){for(var i=-1,r=null==t?0:t.length;++i<r;)if(e(t[i],i,t))return!0;return!1}var De=Ve("length");function Fe(t,e,i){var r;return i(t,(function(t,i,n){if(e(t,i,n))return r=i,!1})),r}function Le(t,e,i,r){for(var n=t.length,o=i+(r?1:-1);r?o--:++o<n;)if(e(t[o],o,t))return o;return-1}function Re(t,e,i){return e==e?function(t,e,i){for(var r=i-1,n=t.length;++r<n;)if(t[r]===e)return r;return-1}(t,e,i):Le(t,Pe,i)}function We(t,e,i,r){for(var n=i-1,o=t.length;++n<o;)if(r(t[n],e))return n;return-1}function Pe(t){return t!=t}function Be(t,e){var i=null==t?0:t.length;return i?Ke(t,e)/i:l}function Ve(e){return function(i){return null==i?t:i[e]}}function Ue(e){return function(i){return null==e?t:e[i]}}function Ne(t,e,i,r,n){return n(t,(function(t,n,o){i=r?(r=!1,t):e(i,t,n,o)})),i}function Ke(e,i){for(var r,n=-1,o=e.length;++n<o;){var s=i(e[n]);s!==t&&(r=r===t?s:r+s)}return r}function He(t,e){for(var i=-1,r=Array(t);++i<t;)r[i]=e(i);return r}function Ge(t){return t?t.slice(0,hi(t)+1).replace(tt,""):t}function Ye(t){return function(e){return t(e)}}function qe(t,e){return Te(e,(function(e){return t[e]}))}function Xe(t,e){return t.has(e)}function Ze(t,e){for(var i=-1,r=t.length;++i<r&&Re(e,t[i],0)>-1;);return i}function Je(t,e){for(var i=t.length;i--&&Re(e,t[i],0)>-1;);return i}var Qe=Ue({À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",Ç:"C",ç:"c",Ð:"D",ð:"d",È:"E",É:"E",Ê:"E",Ë:"E",è:"e",é:"e",ê:"e",ë:"e",Ì:"I",Í:"I",Î:"I",Ï:"I",ì:"i",í:"i",î:"i",ï:"i",Ñ:"N",ñ:"n",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",Ù:"U",Ú:"U",Û:"U",Ü:"U",ù:"u",ú:"u",û:"u",ü:"u",Ý:"Y",ý:"y",ÿ:"y",Æ:"Ae",æ:"ae",Þ:"Th",þ:"th",ß:"ss",Ā:"A",Ă:"A",Ą:"A",ā:"a",ă:"a",ą:"a",Ć:"C",Ĉ:"C",Ċ:"C",Č:"C",ć:"c",ĉ:"c",ċ:"c",č:"c",Ď:"D",Đ:"D",ď:"d",đ:"d",Ē:"E",Ĕ:"E",Ė:"E",Ę:"E",Ě:"E",ē:"e",ĕ:"e",ė:"e",ę:"e",ě:"e",Ĝ:"G",Ğ:"G",Ġ:"G",Ģ:"G",ĝ:"g",ğ:"g",ġ:"g",ģ:"g",Ĥ:"H",Ħ:"H",ĥ:"h",ħ:"h",Ĩ:"I",Ī:"I",Ĭ:"I",Į:"I",İ:"I",ĩ:"i",ī:"i",ĭ:"i",į:"i",ı:"i",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",ĸ:"k",Ĺ:"L",Ļ:"L",Ľ:"L",Ŀ:"L",Ł:"L",ĺ:"l",ļ:"l",ľ:"l",ŀ:"l",ł:"l",Ń:"N",Ņ:"N",Ň:"N",Ŋ:"N",ń:"n",ņ:"n",ň:"n",ŋ:"n",Ō:"O",Ŏ:"O",Ő:"O",ō:"o",ŏ:"o",ő:"o",Ŕ:"R",Ŗ:"R",Ř:"R",ŕ:"r",ŗ:"r",ř:"r",Ś:"S",Ŝ:"S",Ş:"S",Š:"S",ś:"s",ŝ:"s",ş:"s",š:"s",Ţ:"T",Ť:"T",Ŧ:"T",ţ:"t",ť:"t",ŧ:"t",Ũ:"U",Ū:"U",Ŭ:"U",Ů:"U",Ű:"U",Ų:"U",ũ:"u",ū:"u",ŭ:"u",ů:"u",ű:"u",ų:"u",Ŵ:"W",ŵ:"w",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Ź:"Z",Ż:"Z",Ž:"Z",ź:"z",ż:"z",ž:"z",IJ:"IJ",ij:"ij",Œ:"Oe",œ:"oe",ʼn:"'n",ſ:"s"}),ti=Ue({"&":"&","<":"<",">":">",'"':""","'":"'"});function ei(t){return"\\"+oe[t]}function ii(t){return Qt.test(t)}function ri(t){var e=-1,i=Array(t.size);return t.forEach((function(t,r){i[++e]=[r,t]})),i}function ni(t,e){return function(i){return t(e(i))}}function oi(t,e){for(var i=-1,n=t.length,o=0,s=[];++i<n;){var a=t[i];a!==e&&a!==r||(t[i]=r,s[o++]=i)}return s}function si(t){var e=-1,i=Array(t.size);return t.forEach((function(t){i[++e]=t})),i}function ai(t){var e=-1,i=Array(t.size);return t.forEach((function(t){i[++e]=[t,t]})),i}function li(t){return ii(t)?function(t){for(var e=Zt.lastIndex=0;Zt.test(t);)++e;return e}(t):De(t)}function ci(t){return ii(t)?function(t){return t.match(Zt)||[]}(t):function(t){return t.split("")}(t)}function hi(t){for(var e=t.length;e--&&et.test(t.charAt(e)););return e}var ui=Ue({"&":"&","<":"<",">":">",""":'"',"'":"'"}),di=function J(et){var kt,mt=(et=null==et?he:di.defaults(he.Object(),et,di.pick(he,ee))).Array,yt=et.Date,wt=et.Error,xt=et.Function,zt=et.Math,Ct=et.Object,St=et.RegExp,It=et.String,$t=et.TypeError,Mt=mt.prototype,jt=Ct.prototype,Tt=et["__core-js_shared__"],At=xt.prototype.toString,_t=jt.hasOwnProperty,Ot=0,Et=(kt=/[^.]+$/.exec(Tt&&Tt.keys&&Tt.keys.IE_PROTO||""))?"Symbol(src)_1."+kt:"",Dt=jt.toString,Ft=At.call(Ct),Lt=he._,Rt=St("^"+At.call(_t).replace(Z,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Wt=fe?et.Buffer:t,Pt=et.Symbol,Bt=et.Uint8Array,Vt=Wt?Wt.allocUnsafe:t,Ut=ni(Ct.getPrototypeOf,Ct),Nt=Ct.create,Kt=jt.propertyIsEnumerable,Ht=Mt.splice,Gt=Pt?Pt.isConcatSpreadable:t,Yt=Pt?Pt.iterator:t,Zt=Pt?Pt.toStringTag:t,Qt=function(){try{var t=ao(Ct,"defineProperty");return t({},"",{}),t}catch(t){}}(),oe=et.clearTimeout!==he.clearTimeout&&et.clearTimeout,le=yt&&yt.now!==he.Date.now&&yt.now,ce=et.setTimeout!==he.setTimeout&&et.setTimeout,ue=zt.ceil,de=zt.floor,pe=Ct.getOwnPropertySymbols,be=Wt?Wt.isBuffer:t,De=et.isFinite,Ue=Mt.join,fi=ni(Ct.keys,Ct),pi=zt.max,bi=zt.min,gi=yt.now,vi=et.parseInt,ki=zt.random,mi=Mt.reverse,yi=ao(et,"DataView"),wi=ao(et,"Map"),xi=ao(et,"Promise"),zi=ao(et,"Set"),Ci=ao(et,"WeakMap"),Si=ao(Ct,"create"),Ii=Ci&&new Ci,$i={},Mi=Eo(yi),ji=Eo(wi),Ti=Eo(xi),Ai=Eo(zi),_i=Eo(Ci),Oi=Pt?Pt.prototype:t,Ei=Oi?Oi.valueOf:t,Di=Oi?Oi.toString:t;function Fi(t){if(Zs(t)&&!Ps(t)&&!(t instanceof Pi)){if(t instanceof Wi)return t;if(_t.call(t,"__wrapped__"))return Do(t)}return new Wi(t)}var Li=function(){function e(){}return function(i){if(!Xs(i))return{};if(Nt)return Nt(i);e.prototype=i;var r=new e;return e.prototype=t,r}}();function Ri(){}function Wi(e,i){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!i,this.__index__=0,this.__values__=t}function Pi(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=c,this.__views__=[]}function Bi(t){var e=-1,i=null==t?0:t.length;for(this.clear();++e<i;){var r=t[e];this.set(r[0],r[1])}}function Vi(t){var e=-1,i=null==t?0:t.length;for(this.clear();++e<i;){var r=t[e];this.set(r[0],r[1])}}function Ui(t){var e=-1,i=null==t?0:t.length;for(this.clear();++e<i;){var r=t[e];this.set(r[0],r[1])}}function Ni(t){var e=-1,i=null==t?0:t.length;for(this.__data__=new Ui;++e<i;)this.add(t[e])}function Ki(t){var e=this.__data__=new Vi(t);this.size=e.size}function Hi(t,e){var i=Ps(t),r=!i&&Ws(t),n=!i&&!r&&Ns(t),o=!i&&!r&&!n&&oa(t),s=i||r||n||o,a=s?He(t.length,It):[],l=a.length;for(var c in t)!e&&!_t.call(t,c)||s&&("length"==c||n&&("offset"==c||"parent"==c)||o&&("buffer"==c||"byteLength"==c||"byteOffset"==c)||bo(c,l))||a.push(c);return a}function Gi(e){var i=e.length;return i?e[Ur(0,i-1)]:t}function Yi(t,e){return Ao(Sn(t),rr(e,0,t.length))}function qi(t){return Ao(Sn(t))}function Xi(e,i,r){(r!==t&&!Fs(e[i],r)||r===t&&!(i in e))&&er(e,i,r)}function Zi(e,i,r){var n=e[i];_t.call(e,i)&&Fs(n,r)&&(r!==t||i in e)||er(e,i,r)}function Ji(t,e){for(var i=t.length;i--;)if(Fs(t[i][0],e))return i;return-1}function Qi(t,e,i,r){return lr(t,(function(t,n,o){e(r,t,i(t),o)})),r}function tr(t,e){return t&&In(e,$a(e),t)}function er(t,e,i){"__proto__"==e&&Qt?Qt(t,e,{configurable:!0,enumerable:!0,value:i,writable:!0}):t[e]=i}function ir(e,i){for(var r=-1,n=i.length,o=mt(n),s=null==e;++r<n;)o[r]=s?t:xa(e,i[r]);return o}function rr(e,i,r){return e==e&&(r!==t&&(e=e<=r?e:r),i!==t&&(e=e>=i?e:i)),e}function nr(e,i,r,n,o,s){var a,l=1&i,c=2&i,h=4&i;if(r&&(a=o?r(e,n,o,s):r(e)),a!==t)return a;if(!Xs(e))return e;var d=Ps(e);if(d){if(a=function(t){var e=t.length,i=new t.constructor(e);return e&&"string"==typeof t[0]&&_t.call(t,"index")&&(i.index=t.index,i.input=t.input),i}(e),!l)return Sn(e,a)}else{var b=ho(e),w=b==g||b==v;if(Ns(e))return mn(e,l);if(b==y||b==u||w&&!o){if(a=c||w?{}:fo(e),!l)return c?function(t,e){return In(t,co(t),e)}(e,function(t,e){return t&&In(e,Ma(e),t)}(a,e)):function(t,e){return In(t,lo(t),e)}(e,tr(a,e))}else{if(!ne[b])return o?e:{};a=function(t,e,i){var r=t.constructor;switch(e){case $:return yn(t);case f:case p:return new r(+t);case M:return function(t,e){var i=e?yn(t.buffer):t.buffer;return new t.constructor(i,t.byteOffset,t.byteLength)}(t,i);case j:case T:case A:case _:case O:case E:case D:case F:case L:return wn(t,i);case k:return new r;case m:case C:return new r(t);case x:return function(t){var e=new t.constructor(t.source,ct.exec(t));return e.lastIndex=t.lastIndex,e}(t);case z:return new r;case S:return Ei?Ct(Ei.call(t)):{}}}(e,b,l)}}s||(s=new Ki);var I=s.get(e);if(I)return I;s.set(e,a),ia(e)?e.forEach((function(t){a.add(nr(t,i,r,t,e,s))})):Js(e)&&e.forEach((function(t,n){a.set(n,nr(t,i,r,n,e,s))}));var R=d?t:(h?c?to:Qn:c?Ma:$a)(e);return Ce(R||e,(function(t,n){R&&(t=e[n=t]),Zi(a,n,nr(t,i,r,n,e,s))})),a}function or(e,i,r){var n=r.length;if(null==e)return!n;for(e=Ct(e);n--;){var o=r[n],s=e[o];if(s===t&&!(o in e)||!(0,i[o])(s))return!1}return!0}function sr(i,r,n){if("function"!=typeof i)throw new $t(e);return $o((function(){i.apply(t,n)}),r)}function ar(t,e,i,r){var n=-1,o=Me,s=!0,a=t.length,l=[],c=e.length;if(!a)return l;i&&(e=Te(e,Ye(i))),r?(o=je,s=!1):e.length>=200&&(o=Xe,s=!1,e=new Ni(e));t:for(;++n<a;){var h=t[n],u=null==i?h:i(h);if(h=r||0!==h?h:0,s&&u==u){for(var d=c;d--;)if(e[d]===u)continue t;l.push(h)}else o(e,u,r)||l.push(h)}return l}Fi.templateSettings={escape:K,evaluate:H,interpolate:G,variable:"",imports:{_:Fi}},(Fi.prototype=Ri.prototype).constructor=Fi,(Wi.prototype=Li(Ri.prototype)).constructor=Wi,(Pi.prototype=Li(Ri.prototype)).constructor=Pi,Bi.prototype.clear=function(){this.__data__=Si?Si(null):{},this.size=0},Bi.prototype.delete=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},Bi.prototype.get=function(e){var r=this.__data__;if(Si){var n=r[e];return n===i?t:n}return _t.call(r,e)?r[e]:t},Bi.prototype.has=function(e){var i=this.__data__;return Si?i[e]!==t:_t.call(i,e)},Bi.prototype.set=function(e,r){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=Si&&r===t?i:r,this},Vi.prototype.clear=function(){this.__data__=[],this.size=0},Vi.prototype.delete=function(t){var e=this.__data__,i=Ji(e,t);return!(i<0||(i==e.length-1?e.pop():Ht.call(e,i,1),--this.size,0))},Vi.prototype.get=function(e){var i=this.__data__,r=Ji(i,e);return r<0?t:i[r][1]},Vi.prototype.has=function(t){return Ji(this.__data__,t)>-1},Vi.prototype.set=function(t,e){var i=this.__data__,r=Ji(i,t);return r<0?(++this.size,i.push([t,e])):i[r][1]=e,this},Ui.prototype.clear=function(){this.size=0,this.__data__={hash:new Bi,map:new(wi||Vi),string:new Bi}},Ui.prototype.delete=function(t){var e=oo(this,t).delete(t);return this.size-=e?1:0,e},Ui.prototype.get=function(t){return oo(this,t).get(t)},Ui.prototype.has=function(t){return oo(this,t).has(t)},Ui.prototype.set=function(t,e){var i=oo(this,t),r=i.size;return i.set(t,e),this.size+=i.size==r?0:1,this},Ni.prototype.add=Ni.prototype.push=function(t){return this.__data__.set(t,i),this},Ni.prototype.has=function(t){return this.__data__.has(t)},Ki.prototype.clear=function(){this.__data__=new Vi,this.size=0},Ki.prototype.delete=function(t){var e=this.__data__,i=e.delete(t);return this.size=e.size,i},Ki.prototype.get=function(t){return this.__data__.get(t)},Ki.prototype.has=function(t){return this.__data__.has(t)},Ki.prototype.set=function(t,e){var i=this.__data__;if(i instanceof Vi){var r=i.__data__;if(!wi||r.length<199)return r.push([t,e]),this.size=++i.size,this;i=this.__data__=new Ui(r)}return i.set(t,e),this.size=i.size,this};var lr=jn(gr),cr=jn(vr,!0);function hr(t,e){var i=!0;return lr(t,(function(t,r,n){return i=!!e(t,r,n)})),i}function ur(e,i,r){for(var n=-1,o=e.length;++n<o;){var s=e[n],a=i(s);if(null!=a&&(l===t?a==a&&!na(a):r(a,l)))var l=a,c=s}return c}function dr(t,e){var i=[];return lr(t,(function(t,r,n){e(t,r,n)&&i.push(t)})),i}function fr(t,e,i,r,n){var o=-1,s=t.length;for(i||(i=po),n||(n=[]);++o<s;){var a=t[o];e>0&&i(a)?e>1?fr(a,e-1,i,r,n):Ae(n,a):r||(n[n.length]=a)}return n}var pr=Tn(),br=Tn(!0);function gr(t,e){return t&&pr(t,e,$a)}function vr(t,e){return t&&br(t,e,$a)}function kr(t,e){return $e(e,(function(e){return Gs(t[e])}))}function mr(e,i){for(var r=0,n=(i=bn(i,e)).length;null!=e&&r<n;)e=e[Oo(i[r++])];return r&&r==n?e:t}function yr(t,e,i){var r=e(t);return Ps(t)?r:Ae(r,i(t))}function wr(e){return null==e?e===t?"[object Undefined]":"[object Null]":Zt&&Zt in Ct(e)?function(e){var i=_t.call(e,Zt),r=e[Zt];try{e[Zt]=t;var n=!0}catch(t){}var o=Dt.call(e);return n&&(i?e[Zt]=r:delete e[Zt]),o}(e):function(t){return Dt.call(t)}(e)}function xr(t,e){return t>e}function zr(t,e){return null!=t&&_t.call(t,e)}function Cr(t,e){return null!=t&&e in Ct(t)}function Sr(e,i,r){for(var n=r?je:Me,o=e[0].length,s=e.length,a=s,l=mt(s),c=1/0,h=[];a--;){var u=e[a];a&&i&&(u=Te(u,Ye(i))),c=bi(u.length,c),l[a]=!r&&(i||o>=120&&u.length>=120)?new Ni(a&&u):t}u=e[0];var d=-1,f=l[0];t:for(;++d<o&&h.length<c;){var p=u[d],b=i?i(p):p;if(p=r||0!==p?p:0,!(f?Xe(f,b):n(h,b,r))){for(a=s;--a;){var g=l[a];if(!(g?Xe(g,b):n(e[a],b,r)))continue t}f&&f.push(b),h.push(p)}}return h}function Ir(e,i,r){var n=null==(e=Co(e,i=bn(i,e)))?e:e[Oo(Ho(i))];return null==n?t:xe(n,e,r)}function $r(t){return Zs(t)&&wr(t)==u}function Mr(e,i,r,n,o){return e===i||(null==e||null==i||!Zs(e)&&!Zs(i)?e!=e&&i!=i:function(e,i,r,n,o,s){var a=Ps(e),l=Ps(i),c=a?d:ho(e),h=l?d:ho(i),g=(c=c==u?y:c)==y,v=(h=h==u?y:h)==y,w=c==h;if(w&&Ns(e)){if(!Ns(i))return!1;a=!0,g=!1}if(w&&!g)return s||(s=new Ki),a||oa(e)?Zn(e,i,r,n,o,s):function(t,e,i,r,n,o,s){switch(i){case M:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case $:return!(t.byteLength!=e.byteLength||!o(new Bt(t),new Bt(e)));case f:case p:case m:return Fs(+t,+e);case b:return t.name==e.name&&t.message==e.message;case x:case C:return t==e+"";case k:var a=ri;case z:if(a||(a=si),t.size!=e.size&&!(1&r))return!1;var l=s.get(t);if(l)return l==e;r|=2,s.set(t,e);var c=Zn(a(t),a(e),r,n,o,s);return s.delete(t),c;case S:if(Ei)return Ei.call(t)==Ei.call(e)}return!1}(e,i,c,r,n,o,s);if(!(1&r)){var I=g&&_t.call(e,"__wrapped__"),j=v&&_t.call(i,"__wrapped__");if(I||j){var T=I?e.value():e,A=j?i.value():i;return s||(s=new Ki),o(T,A,r,n,s)}}return!!w&&(s||(s=new Ki),function(e,i,r,n,o,s){var a=1&r,l=Qn(e),c=l.length;if(c!=Qn(i).length&&!a)return!1;for(var h=c;h--;){var u=l[h];if(!(a?u in i:_t.call(i,u)))return!1}var d=s.get(e),f=s.get(i);if(d&&f)return d==i&&f==e;var p=!0;s.set(e,i),s.set(i,e);for(var b=a;++h<c;){var g=e[u=l[h]],v=i[u];if(n)var k=a?n(v,g,u,i,e,s):n(g,v,u,e,i,s);if(!(k===t?g===v||o(g,v,r,n,s):k)){p=!1;break}b||(b="constructor"==u)}if(p&&!b){var m=e.constructor,y=i.constructor;m==y||!("constructor"in e)||!("constructor"in i)||"function"==typeof m&&m instanceof m&&"function"==typeof y&&y instanceof y||(p=!1)}return s.delete(e),s.delete(i),p}(e,i,r,n,o,s))}(e,i,r,n,Mr,o))}function jr(e,i,r,n){var o=r.length,s=o,a=!n;if(null==e)return!s;for(e=Ct(e);o--;){var l=r[o];if(a&&l[2]?l[1]!==e[l[0]]:!(l[0]in e))return!1}for(;++o<s;){var c=(l=r[o])[0],h=e[c],u=l[1];if(a&&l[2]){if(h===t&&!(c in e))return!1}else{var d=new Ki;if(n)var f=n(h,u,c,e,i,d);if(!(f===t?Mr(u,h,3,n,d):f))return!1}}return!0}function Tr(t){return!(!Xs(t)||(e=t,Et&&Et in e))&&(Gs(t)?Rt:dt).test(Eo(t));var e}function Ar(t){return"function"==typeof t?t:null==t?Qa:"object"==typeof t?Ps(t)?Fr(t[0],t[1]):Dr(t):ll(t)}function _r(t){if(!yo(t))return fi(t);var e=[];for(var i in Ct(t))_t.call(t,i)&&"constructor"!=i&&e.push(i);return e}function Or(t,e){return t<e}function Er(t,e){var i=-1,r=Vs(t)?mt(t.length):[];return lr(t,(function(t,n,o){r[++i]=e(t,n,o)})),r}function Dr(t){var e=so(t);return 1==e.length&&e[0][2]?xo(e[0][0],e[0][1]):function(i){return i===t||jr(i,t,e)}}function Fr(e,i){return vo(e)&&wo(i)?xo(Oo(e),i):function(r){var n=xa(r,e);return n===t&&n===i?za(r,e):Mr(i,n,3)}}function Lr(e,i,r,n,o){e!==i&&pr(i,(function(s,a){if(o||(o=new Ki),Xs(s))!function(e,i,r,n,o,s,a){var l=So(e,r),c=So(i,r),h=a.get(c);if(h)Xi(e,r,h);else{var u=s?s(l,c,r+"",e,i,a):t,d=u===t;if(d){var f=Ps(c),p=!f&&Ns(c),b=!f&&!p&&oa(c);u=c,f||p||b?Ps(l)?u=l:Us(l)?u=Sn(l):p?(d=!1,u=mn(c,!0)):b?(d=!1,u=wn(c,!0)):u=[]:ta(c)||Ws(c)?(u=l,Ws(l)?u=fa(l):Xs(l)&&!Gs(l)||(u=fo(c))):d=!1}d&&(a.set(c,u),o(u,c,n,s,a),a.delete(c)),Xi(e,r,u)}}(e,i,a,r,Lr,n,o);else{var l=n?n(So(e,a),s,a+"",e,i,o):t;l===t&&(l=s),Xi(e,a,l)}}),Ma)}function Rr(e,i){var r=e.length;if(r)return bo(i+=i<0?r:0,r)?e[i]:t}function Wr(t,e,i){e=e.length?Te(e,(function(t){return Ps(t)?function(e){return mr(e,1===t.length?t[0]:t)}:t})):[Qa];var r=-1;e=Te(e,Ye(no()));var n=Er(t,(function(t){var i=Te(e,(function(e){return e(t)}));return{criteria:i,index:++r,value:t}}));return function(t){var e=t.length;for(t.sort((function(t,e){return function(t,e,i){for(var r=-1,n=t.criteria,o=e.criteria,s=n.length,a=i.length;++r<s;){var l=xn(n[r],o[r]);if(l)return r>=a?l:l*("desc"==i[r]?-1:1)}return t.index-e.index}(t,e,i)}));e--;)t[e]=t[e].value;return t}(n)}function Pr(t,e,i){for(var r=-1,n=e.length,o={};++r<n;){var s=e[r],a=mr(t,s);i(a,s)&&Yr(o,bn(s,t),a)}return o}function Br(t,e,i,r){var n=r?We:Re,o=-1,s=e.length,a=t;for(t===e&&(e=Sn(e)),i&&(a=Te(t,Ye(i)));++o<s;)for(var l=0,c=e[o],h=i?i(c):c;(l=n(a,h,l,r))>-1;)a!==t&&Ht.call(a,l,1),Ht.call(t,l,1);return t}function Vr(t,e){for(var i=t?e.length:0,r=i-1;i--;){var n=e[i];if(i==r||n!==o){var o=n;bo(n)?Ht.call(t,n,1):an(t,n)}}return t}function Ur(t,e){return t+de(ki()*(e-t+1))}function Nr(t,e){var i="";if(!t||e<1||e>a)return i;do{e%2&&(i+=t),(e=de(e/2))&&(t+=t)}while(e);return i}function Kr(t,e){return Mo(zo(t,e,Qa),t+"")}function Hr(t){return Gi(Fa(t))}function Gr(t,e){var i=Fa(t);return Ao(i,rr(e,0,i.length))}function Yr(e,i,r,n){if(!Xs(e))return e;for(var o=-1,s=(i=bn(i,e)).length,a=s-1,l=e;null!=l&&++o<s;){var c=Oo(i[o]),h=r;if("__proto__"===c||"constructor"===c||"prototype"===c)return e;if(o!=a){var u=l[c];(h=n?n(u,c,l):t)===t&&(h=Xs(u)?u:bo(i[o+1])?[]:{})}Zi(l,c,h),l=l[c]}return e}var qr=Ii?function(t,e){return Ii.set(t,e),t}:Qa,Xr=Qt?function(t,e){return Qt(t,"toString",{configurable:!0,enumerable:!1,value:Xa(e),writable:!0})}:Qa;function Zr(t){return Ao(Fa(t))}function Jr(t,e,i){var r=-1,n=t.length;e<0&&(e=-e>n?0:n+e),(i=i>n?n:i)<0&&(i+=n),n=e>i?0:i-e>>>0,e>>>=0;for(var o=mt(n);++r<n;)o[r]=t[r+e];return o}function Qr(t,e){var i;return lr(t,(function(t,r,n){return!(i=e(t,r,n))})),!!i}function tn(t,e,i){var r=0,n=null==t?r:t.length;if("number"==typeof e&&e==e&&n<=2147483647){for(;r<n;){var o=r+n>>>1,s=t[o];null!==s&&!na(s)&&(i?s<=e:s<e)?r=o+1:n=o}return n}return en(t,e,Qa,i)}function en(e,i,r,n){var o=0,s=null==e?0:e.length;if(0===s)return 0;for(var a=(i=r(i))!=i,l=null===i,c=na(i),h=i===t;o<s;){var u=de((o+s)/2),d=r(e[u]),f=d!==t,p=null===d,b=d==d,g=na(d);if(a)var v=n||b;else v=h?b&&(n||f):l?b&&f&&(n||!p):c?b&&f&&!p&&(n||!g):!p&&!g&&(n?d<=i:d<i);v?o=u+1:s=u}return bi(s,4294967294)}function rn(t,e){for(var i=-1,r=t.length,n=0,o=[];++i<r;){var s=t[i],a=e?e(s):s;if(!i||!Fs(a,l)){var l=a;o[n++]=0===s?0:s}}return o}function nn(t){return"number"==typeof t?t:na(t)?l:+t}function on(t){if("string"==typeof t)return t;if(Ps(t))return Te(t,on)+"";if(na(t))return Di?Di.call(t):"";var e=t+"";return"0"==e&&1/t==-1/0?"-0":e}function sn(t,e,i){var r=-1,n=Me,o=t.length,s=!0,a=[],l=a;if(i)s=!1,n=je;else if(o>=200){var c=e?null:Kn(t);if(c)return si(c);s=!1,n=Xe,l=new Ni}else l=e?[]:a;t:for(;++r<o;){var h=t[r],u=e?e(h):h;if(h=i||0!==h?h:0,s&&u==u){for(var d=l.length;d--;)if(l[d]===u)continue t;e&&l.push(u),a.push(h)}else n(l,u,i)||(l!==a&&l.push(u),a.push(h))}return a}function an(t,e){var i=-1,r=(e=bn(e,t)).length;if(!r)return!0;for(;++i<r;){var n=Oo(e[i]);if("__proto__"===n&&!_t.call(t,"__proto__"))return!1;if(("constructor"===n||"prototype"===n)&&i<r-1)return!1}var o=Co(t,e);return null==o||delete o[Oo(Ho(e))]}function ln(t,e,i,r){return Yr(t,e,i(mr(t,e)),r)}function cn(t,e,i,r){for(var n=t.length,o=r?n:-1;(r?o--:++o<n)&&e(t[o],o,t););return i?Jr(t,r?0:o,r?o+1:n):Jr(t,r?o+1:0,r?n:o)}function hn(t,e){var i=t;return i instanceof Pi&&(i=i.value()),_e(e,(function(t,e){return e.func.apply(e.thisArg,Ae([t],e.args))}),i)}function un(t,e,i){var r=t.length;if(r<2)return r?sn(t[0]):[];for(var n=-1,o=mt(r);++n<r;)for(var s=t[n],a=-1;++a<r;)a!=n&&(o[n]=ar(o[n]||s,t[a],e,i));return sn(fr(o,1),e,i)}function dn(e,i,r){for(var n=-1,o=e.length,s=i.length,a={};++n<o;)r(a,e[n],n<s?i[n]:t);return a}function fn(t){return Us(t)?t:[]}function pn(t){return"function"==typeof t?t:Qa}function bn(t,e){return Ps(t)?t:vo(t,e)?[t]:_o(pa(t))}var gn=Kr;function vn(e,i,r){var n=e.length;return r=r===t?n:r,!i&&r>=n?e:Jr(e,i,r)}var kn=oe||function(t){return he.clearTimeout(t)};function mn(t,e){if(e)return t.slice();var i=t.length,r=Vt?Vt(i):new t.constructor(i);return t.copy(r),r}function yn(t){var e=new t.constructor(t.byteLength);return new Bt(e).set(new Bt(t)),e}function wn(t,e){var i=e?yn(t.buffer):t.buffer;return new t.constructor(i,t.byteOffset,t.length)}function xn(e,i){if(e!==i){var r=e!==t,n=null===e,o=e==e,s=na(e),a=i!==t,l=null===i,c=i==i,h=na(i);if(!l&&!h&&!s&&e>i||s&&a&&c&&!l&&!h||n&&a&&c||!r&&c||!o)return 1;if(!n&&!s&&!h&&e<i||h&&r&&o&&!n&&!s||l&&r&&o||!a&&o||!c)return-1}return 0}function zn(t,e,i,r){for(var n=-1,o=t.length,s=i.length,a=-1,l=e.length,c=pi(o-s,0),h=mt(l+c),u=!r;++a<l;)h[a]=e[a];for(;++n<s;)(u||n<o)&&(h[i[n]]=t[n]);for(;c--;)h[a++]=t[n++];return h}function Cn(t,e,i,r){for(var n=-1,o=t.length,s=-1,a=i.length,l=-1,c=e.length,h=pi(o-a,0),u=mt(h+c),d=!r;++n<h;)u[n]=t[n];for(var f=n;++l<c;)u[f+l]=e[l];for(;++s<a;)(d||n<o)&&(u[f+i[s]]=t[n++]);return u}function Sn(t,e){var i=-1,r=t.length;for(e||(e=mt(r));++i<r;)e[i]=t[i];return e}function In(e,i,r,n){var o=!r;r||(r={});for(var s=-1,a=i.length;++s<a;){var l=i[s],c=n?n(r[l],e[l],l,r,e):t;c===t&&(c=e[l]),o?er(r,l,c):Zi(r,l,c)}return r}function $n(t,e){return function(i,r){var n=Ps(i)?ze:Qi,o=e?e():{};return n(i,t,no(r,2),o)}}function Mn(e){return Kr((function(i,r){var n=-1,o=r.length,s=o>1?r[o-1]:t,a=o>2?r[2]:t;for(s=e.length>3&&"function"==typeof s?(o--,s):t,a&&go(r[0],r[1],a)&&(s=o<3?t:s,o=1),i=Ct(i);++n<o;){var l=r[n];l&&e(i,l,n,s)}return i}))}function jn(t,e){return function(i,r){if(null==i)return i;if(!Vs(i))return t(i,r);for(var n=i.length,o=e?n:-1,s=Ct(i);(e?o--:++o<n)&&!1!==r(s[o],o,s););return i}}function Tn(t){return function(e,i,r){for(var n=-1,o=Ct(e),s=r(e),a=s.length;a--;){var l=s[t?a:++n];if(!1===i(o[l],l,o))break}return e}}function An(e){return function(i){var r=ii(i=pa(i))?ci(i):t,n=r?r[0]:i.charAt(0),o=r?vn(r,1).join(""):i.slice(1);return n[e]()+o}}function _n(t){return function(e){return _e(Ga(Wa(e).replace(qt,"")),t,"")}}function On(t){return function(){var e=arguments;switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3]);case 5:return new t(e[0],e[1],e[2],e[3],e[4]);case 6:return new t(e[0],e[1],e[2],e[3],e[4],e[5]);case 7:return new t(e[0],e[1],e[2],e[3],e[4],e[5],e[6])}var i=Li(t.prototype),r=t.apply(i,e);return Xs(r)?r:i}}function En(e){return function(i,r,n){var o=Ct(i);if(!Vs(i)){var s=no(r,3);i=$a(i),r=function(t){return s(o[t],t,o)}}var a=e(i,r,n);return a>-1?o[s?i[a]:a]:t}}function Dn(i){return Jn((function(r){var n=r.length,o=n,s=Wi.prototype.thru;for(i&&r.reverse();o--;){var a=r[o];if("function"!=typeof a)throw new $t(e);if(s&&!l&&"wrapper"==io(a))var l=new Wi([],!0)}for(o=l?o:n;++o<n;){var c=io(a=r[o]),h="wrapper"==c?eo(a):t;l=h&&ko(h[0])&&424==h[1]&&!h[4].length&&1==h[9]?l[io(h[0])].apply(l,h[3]):1==a.length&&ko(a)?l[c]():l.thru(a)}return function(){var t=arguments,e=t[0];if(l&&1==t.length&&Ps(e))return l.plant(e).value();for(var i=0,o=n?r[i].apply(this,t):e;++i<n;)o=r[i].call(this,o);return o}}))}function Fn(e,i,r,n,s,a,l,c,h,u){var d=i&o,f=1&i,p=2&i,b=24&i,g=512&i,v=p?t:On(e);return function o(){for(var k=arguments.length,m=mt(k),y=k;y--;)m[y]=arguments[y];if(b)var w=ro(o),x=function(t,e){for(var i=t.length,r=0;i--;)t[i]===e&&++r;return r}(m,w);if(n&&(m=zn(m,n,s,b)),a&&(m=Cn(m,a,l,b)),k-=x,b&&k<u){var z=oi(m,w);return Un(e,i,Fn,o.placeholder,r,m,z,c,h,u-k)}var C=f?r:this,S=p?C[e]:e;return k=m.length,c?m=function(e,i){for(var r=e.length,n=bi(i.length,r),o=Sn(e);n--;){var s=i[n];e[n]=bo(s,r)?o[s]:t}return e}(m,c):g&&k>1&&m.reverse(),d&&h<k&&(m.length=h),this&&this!==he&&this instanceof o&&(S=v||On(S)),S.apply(C,m)}}function Ln(t,e){return function(i,r){return function(t,e,i,r){return gr(t,(function(t,n,o){e(r,i(t),n,o)})),r}(i,t,e(r),{})}}function Rn(e,i){return function(r,n){var o;if(r===t&&n===t)return i;if(r!==t&&(o=r),n!==t){if(o===t)return n;"string"==typeof r||"string"==typeof n?(r=on(r),n=on(n)):(r=nn(r),n=nn(n)),o=e(r,n)}return o}}function Wn(t){return Jn((function(e){return e=Te(e,Ye(no())),Kr((function(i){var r=this;return t(e,(function(t){return xe(t,r,i)}))}))}))}function Pn(e,i){var r=(i=i===t?" ":on(i)).length;if(r<2)return r?Nr(i,e):i;var n=Nr(i,ue(e/li(i)));return ii(i)?vn(ci(n),0,e).join(""):n.slice(0,e)}function Bn(e){return function(i,r,n){return n&&"number"!=typeof n&&go(i,r,n)&&(r=n=t),i=ca(i),r===t?(r=i,i=0):r=ca(r),function(t,e,i,r){for(var n=-1,o=pi(ue((e-t)/(i||1)),0),s=mt(o);o--;)s[r?o:++n]=t,t+=i;return s}(i,r,n=n===t?i<r?1:-1:ca(n),e)}}function Vn(t){return function(e,i){return"string"==typeof e&&"string"==typeof i||(e=da(e),i=da(i)),t(e,i)}}function Un(e,i,r,o,s,a,l,c,h,u){var d=8&i;i|=d?n:64,4&(i&=~(d?64:n))||(i&=-4);var f=[e,i,s,d?a:t,d?l:t,d?t:a,d?t:l,c,h,u],p=r.apply(t,f);return ko(e)&&Io(p,f),p.placeholder=o,jo(p,e,i)}function Nn(t){var e=zt[t];return function(t,i){if(t=da(t),(i=null==i?0:bi(ha(i),292))&&De(t)){var r=(pa(t)+"e").split("e");return+((r=(pa(e(r[0]+"e"+(+r[1]+i)))+"e").split("e"))[0]+"e"+(+r[1]-i))}return e(t)}}var Kn=zi&&1/si(new zi([,-0]))[1]==s?function(t){return new zi(t)}:nl;function Hn(t){return function(e){var i=ho(e);return i==k?ri(e):i==z?ai(e):function(t,e){return Te(e,(function(e){return[e,t[e]]}))}(e,t(e))}}function Gn(i,s,a,l,c,h,u,d){var f=2&s;if(!f&&"function"!=typeof i)throw new $t(e);var p=l?l.length:0;if(p||(s&=-97,l=c=t),u=u===t?u:pi(ha(u),0),d=d===t?d:ha(d),p-=c?c.length:0,64&s){var b=l,g=c;l=c=t}var v=f?t:eo(i),k=[i,s,a,l,c,b,g,h,u,d];if(v&&function(t,e){var i=t[1],n=e[1],s=i|n;if(!(s<131||(n==o&&8==i||n==o&&256==i&&t[7].length<=e[8]||384==n&&e[7].length<=e[8]&&8==i)))return t;1&n&&(t[2]=e[2],s|=1&i?0:4);var a=e[3];if(a){var l=t[3];t[3]=l?zn(l,a,e[4]):a,t[4]=l?oi(t[3],r):e[4]}(a=e[5])&&(t[5]=(l=t[5])?Cn(l,a,e[6]):a,t[6]=l?oi(t[5],r):e[6]),(a=e[7])&&(t[7]=a),n&o&&(t[8]=null==t[8]?e[8]:bi(t[8],e[8])),null==t[9]&&(t[9]=e[9]),t[0]=e[0],t[1]=s}(k,v),i=k[0],s=k[1],a=k[2],l=k[3],c=k[4],!(d=k[9]=k[9]===t?f?0:i.length:pi(k[9]-p,0))&&24&s&&(s&=-25),s&&1!=s)m=8==s||16==s?function(e,i,r){var n=On(e);return function o(){for(var s=arguments.length,a=mt(s),l=s,c=ro(o);l--;)a[l]=arguments[l];var h=s<3&&a[0]!==c&&a[s-1]!==c?[]:oi(a,c);return(s-=h.length)<r?Un(e,i,Fn,o.placeholder,t,a,h,t,t,r-s):xe(this&&this!==he&&this instanceof o?n:e,this,a)}}(i,s,d):s!=n&&33!=s||c.length?Fn.apply(t,k):function(t,e,i,r){var n=1&e,o=On(t);return function e(){for(var s=-1,a=arguments.length,l=-1,c=r.length,h=mt(c+a),u=this&&this!==he&&this instanceof e?o:t;++l<c;)h[l]=r[l];for(;a--;)h[l++]=arguments[++s];return xe(u,n?i:this,h)}}(i,s,a,l);else var m=function(t,e,i){var r=1&e,n=On(t);return function e(){return(this&&this!==he&&this instanceof e?n:t).apply(r?i:this,arguments)}}(i,s,a);return jo((v?qr:Io)(m,k),i,s)}function Yn(e,i,r,n){return e===t||Fs(e,jt[r])&&!_t.call(n,r)?i:e}function qn(e,i,r,n,o,s){return Xs(e)&&Xs(i)&&(s.set(i,e),Lr(e,i,t,qn,s),s.delete(i)),e}function Xn(e){return ta(e)?t:e}function Zn(e,i,r,n,o,s){var a=1&r,l=e.length,c=i.length;if(l!=c&&!(a&&c>l))return!1;var h=s.get(e),u=s.get(i);if(h&&u)return h==i&&u==e;var d=-1,f=!0,p=2&r?new Ni:t;for(s.set(e,i),s.set(i,e);++d<l;){var b=e[d],g=i[d];if(n)var v=a?n(g,b,d,i,e,s):n(b,g,d,e,i,s);if(v!==t){if(v)continue;f=!1;break}if(p){if(!Ee(i,(function(t,e){if(!Xe(p,e)&&(b===t||o(b,t,r,n,s)))return p.push(e)}))){f=!1;break}}else if(b!==g&&!o(b,g,r,n,s)){f=!1;break}}return s.delete(e),s.delete(i),f}function Jn(e){return Mo(zo(e,t,Bo),e+"")}function Qn(t){return yr(t,$a,lo)}function to(t){return yr(t,Ma,co)}var eo=Ii?function(t){return Ii.get(t)}:nl;function io(t){for(var e=t.name+"",i=$i[e],r=_t.call($i,e)?i.length:0;r--;){var n=i[r],o=n.func;if(null==o||o==t)return n.name}return e}function ro(t){return(_t.call(Fi,"placeholder")?Fi:t).placeholder}function no(){var t=Fi.iteratee||tl;return t=t===tl?Ar:t,arguments.length?t(arguments[0],arguments[1]):t}function oo(t,e){var i,r,n=t.__data__;return("string"==(r=typeof(i=e))||"number"==r||"symbol"==r||"boolean"==r?"__proto__"!==i:null===i)?n["string"==typeof e?"string":"hash"]:n.map}function so(t){for(var e=$a(t),i=e.length;i--;){var r=e[i],n=t[r];e[i]=[r,n,wo(n)]}return e}function ao(e,i){var r=function(e,i){return null==e?t:e[i]}(e,i);return Tr(r)?r:t}var lo=pe?function(t){return null==t?[]:(t=Ct(t),$e(pe(t),(function(e){return Kt.call(t,e)})))}:ul,co=pe?function(t){for(var e=[];t;)Ae(e,lo(t)),t=Ut(t);return e}:ul,ho=wr;function uo(t,e,i){for(var r=-1,n=(e=bn(e,t)).length,o=!1;++r<n;){var s=Oo(e[r]);if(!(o=null!=t&&i(t,s)))break;t=t[s]}return o||++r!=n?o:!!(n=null==t?0:t.length)&&qs(n)&&bo(s,n)&&(Ps(t)||Ws(t))}function fo(t){return"function"!=typeof t.constructor||yo(t)?{}:Li(Ut(t))}function po(t){return Ps(t)||Ws(t)||!!(Gt&&t&&t[Gt])}function bo(t,e){var i=typeof t;return!!(e=null==e?a:e)&&("number"==i||"symbol"!=i&&pt.test(t))&&t>-1&&t%1==0&&t<e}function go(t,e,i){if(!Xs(i))return!1;var r=typeof e;return!!("number"==r?Vs(i)&&bo(e,i.length):"string"==r&&e in i)&&Fs(i[e],t)}function vo(t,e){if(Ps(t))return!1;var i=typeof t;return!("number"!=i&&"symbol"!=i&&"boolean"!=i&&null!=t&&!na(t))||q.test(t)||!Y.test(t)||null!=e&&t in Ct(e)}function ko(t){var e=io(t),i=Fi[e];if("function"!=typeof i||!(e in Pi.prototype))return!1;if(t===i)return!0;var r=eo(i);return!!r&&t===r[0]}(yi&&ho(new yi(new ArrayBuffer(1)))!=M||wi&&ho(new wi)!=k||xi&&ho(xi.resolve())!=w||zi&&ho(new zi)!=z||Ci&&ho(new Ci)!=I)&&(ho=function(e){var i=wr(e),r=i==y?e.constructor:t,n=r?Eo(r):"";if(n)switch(n){case Mi:return M;case ji:return k;case Ti:return w;case Ai:return z;case _i:return I}return i});var mo=Tt?Gs:dl;function yo(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||jt)}function wo(t){return t==t&&!Xs(t)}function xo(e,i){return function(r){return null!=r&&r[e]===i&&(i!==t||e in Ct(r))}}function zo(e,i,r){return i=pi(i===t?e.length-1:i,0),function(){for(var t=arguments,n=-1,o=pi(t.length-i,0),s=mt(o);++n<o;)s[n]=t[i+n];n=-1;for(var a=mt(i+1);++n<i;)a[n]=t[n];return a[i]=r(s),xe(e,this,a)}}function Co(t,e){return e.length<2?t:mr(t,Jr(e,0,-1))}function So(t,e){if(("constructor"!==e||"function"!=typeof t[e])&&"__proto__"!=e)return t[e]}var Io=To(qr),$o=ce||function(t,e){return he.setTimeout(t,e)},Mo=To(Xr);function jo(t,e,i){var r=e+"";return Mo(t,function(t,e){var i=e.length;if(!i)return t;var r=i-1;return e[r]=(i>1?"& ":"")+e[r],e=e.join(i>2?", ":" "),t.replace(it,"{\n/* [wrapped with "+e+"] */\n")}(r,function(t,e){return Ce(h,(function(i){var r="_."+i[0];e&i[1]&&!Me(t,r)&&t.push(r)})),t.sort()}(function(t){var e=t.match(rt);return e?e[1].split(nt):[]}(r),i)))}function To(e){var i=0,r=0;return function(){var n=gi(),o=16-(n-r);if(r=n,o>0){if(++i>=800)return arguments[0]}else i=0;return e.apply(t,arguments)}}function Ao(e,i){var r=-1,n=e.length,o=n-1;for(i=i===t?n:i;++r<i;){var s=Ur(r,o),a=e[s];e[s]=e[r],e[r]=a}return e.length=i,e}var _o=function(){var t=Ts((function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(""),t.replace(X,(function(t,i,r,n){e.push(r?n.replace(at,"$1"):i||t)})),e}),(function(t){return 500===e.size&&e.clear(),t})),e=t.cache;return t}();function Oo(t){if("string"==typeof t||na(t))return t;var e=t+"";return"0"==e&&1/t==-1/0?"-0":e}function Eo(t){if(null!=t){try{return At.call(t)}catch(t){}try{return t+""}catch(t){}}return""}function Do(t){if(t instanceof Pi)return t.clone();var e=new Wi(t.__wrapped__,t.__chain__);return e.__actions__=Sn(t.__actions__),e.__index__=t.__index__,e.__values__=t.__values__,e}var Fo=Kr((function(t,e){return Us(t)?ar(t,fr(e,1,Us,!0)):[]})),Lo=Kr((function(e,i){var r=Ho(i);return Us(r)&&(r=t),Us(e)?ar(e,fr(i,1,Us,!0),no(r,2)):[]})),Ro=Kr((function(e,i){var r=Ho(i);return Us(r)&&(r=t),Us(e)?ar(e,fr(i,1,Us,!0),t,r):[]}));function Wo(t,e,i){var r=null==t?0:t.length;if(!r)return-1;var n=null==i?0:ha(i);return n<0&&(n=pi(r+n,0)),Le(t,no(e,3),n)}function Po(e,i,r){var n=null==e?0:e.length;if(!n)return-1;var o=n-1;return r!==t&&(o=ha(r),o=r<0?pi(n+o,0):bi(o,n-1)),Le(e,no(i,3),o,!0)}function Bo(t){return null!=t&&t.length?fr(t,1):[]}function Vo(e){return e&&e.length?e[0]:t}var Uo=Kr((function(t){var e=Te(t,fn);return e.length&&e[0]===t[0]?Sr(e):[]})),No=Kr((function(e){var i=Ho(e),r=Te(e,fn);return i===Ho(r)?i=t:r.pop(),r.length&&r[0]===e[0]?Sr(r,no(i,2)):[]})),Ko=Kr((function(e){var i=Ho(e),r=Te(e,fn);return(i="function"==typeof i?i:t)&&r.pop(),r.length&&r[0]===e[0]?Sr(r,t,i):[]}));function Ho(e){var i=null==e?0:e.length;return i?e[i-1]:t}var Go=Kr(Yo);function Yo(t,e){return t&&t.length&&e&&e.length?Br(t,e):t}var qo=Jn((function(t,e){var i=null==t?0:t.length,r=ir(t,e);return Vr(t,Te(e,(function(t){return bo(t,i)?+t:t})).sort(xn)),r}));function Xo(t){return null==t?t:mi.call(t)}var Zo=Kr((function(t){return sn(fr(t,1,Us,!0))})),Jo=Kr((function(e){var i=Ho(e);return Us(i)&&(i=t),sn(fr(e,1,Us,!0),no(i,2))})),Qo=Kr((function(e){var i=Ho(e);return i="function"==typeof i?i:t,sn(fr(e,1,Us,!0),t,i)}));function ts(t){if(!t||!t.length)return[];var e=0;return t=$e(t,(function(t){if(Us(t))return e=pi(t.length,e),!0})),He(e,(function(e){return Te(t,Ve(e))}))}function es(e,i){if(!e||!e.length)return[];var r=ts(e);return null==i?r:Te(r,(function(e){return xe(i,t,e)}))}var is=Kr((function(t,e){return Us(t)?ar(t,e):[]})),rs=Kr((function(t){return un($e(t,Us))})),ns=Kr((function(e){var i=Ho(e);return Us(i)&&(i=t),un($e(e,Us),no(i,2))})),os=Kr((function(e){var i=Ho(e);return i="function"==typeof i?i:t,un($e(e,Us),t,i)})),ss=Kr(ts),as=Kr((function(e){var i=e.length,r=i>1?e[i-1]:t;return r="function"==typeof r?(e.pop(),r):t,es(e,r)}));function ls(t){var e=Fi(t);return e.__chain__=!0,e}function cs(t,e){return e(t)}var hs=Jn((function(e){var i=e.length,r=i?e[0]:0,n=this.__wrapped__,o=function(t){return ir(t,e)};return!(i>1||this.__actions__.length)&&n instanceof Pi&&bo(r)?((n=n.slice(r,+r+(i?1:0))).__actions__.push({func:cs,args:[o],thisArg:t}),new Wi(n,this.__chain__).thru((function(e){return i&&!e.length&&e.push(t),e}))):this.thru(o)})),us=$n((function(t,e,i){_t.call(t,i)?++t[i]:er(t,i,1)})),ds=En(Wo),fs=En(Po);function ps(t,e){return(Ps(t)?Ce:lr)(t,no(e,3))}function bs(t,e){return(Ps(t)?Se:cr)(t,no(e,3))}var gs=$n((function(t,e,i){_t.call(t,i)?t[i].push(e):er(t,i,[e])})),vs=Kr((function(t,e,i){var r=-1,n="function"==typeof e,o=Vs(t)?mt(t.length):[];return lr(t,(function(t){o[++r]=n?xe(e,t,i):Ir(t,e,i)})),o})),ks=$n((function(t,e,i){er(t,i,e)}));function ms(t,e){return(Ps(t)?Te:Er)(t,no(e,3))}var ys=$n((function(t,e,i){t[i?0:1].push(e)}),(function(){return[[],[]]})),ws=Kr((function(t,e){if(null==t)return[];var i=e.length;return i>1&&go(t,e[0],e[1])?e=[]:i>2&&go(e[0],e[1],e[2])&&(e=[e[0]]),Wr(t,fr(e,1),[])})),xs=le||function(){return he.Date.now()};function zs(e,i,r){return i=r?t:i,Gn(e,o,t,t,t,t,i=e&&null==i?e.length:i)}function Cs(i,r){var n;if("function"!=typeof r)throw new $t(e);return i=ha(i),function(){return--i>0&&(n=r.apply(this,arguments)),i<=1&&(r=t),n}}var Ss=Kr((function(t,e,i){var r=1;if(i.length){var o=oi(i,ro(Ss));r|=n}return Gn(t,r,e,i,o)})),Is=Kr((function(t,e,i){var r=3;if(i.length){var o=oi(i,ro(Is));r|=n}return Gn(e,r,t,i,o)}));function $s(i,r,n){var o,s,a,l,c,h,u=0,d=!1,f=!1,p=!0;if("function"!=typeof i)throw new $t(e);function b(e){var r=o,n=s;return o=s=t,u=e,l=i.apply(n,r)}function g(e){var i=e-h;return h===t||i>=r||i<0||f&&e-u>=a}function v(){var t=xs();if(g(t))return k(t);c=$o(v,function(t){var e=r-(t-h);return f?bi(e,a-(t-u)):e}(t))}function k(e){return c=t,p&&o?b(e):(o=s=t,l)}function m(){var e=xs(),i=g(e);if(o=arguments,s=this,h=e,i){if(c===t)return function(t){return u=t,c=$o(v,r),d?b(t):l}(h);if(f)return kn(c),c=$o(v,r),b(h)}return c===t&&(c=$o(v,r)),l}return r=da(r)||0,Xs(n)&&(d=!!n.leading,a=(f="maxWait"in n)?pi(da(n.maxWait)||0,r):a,p="trailing"in n?!!n.trailing:p),m.cancel=function(){c!==t&&kn(c),u=0,o=h=s=c=t},m.flush=function(){return c===t?l:k(xs())},m}var Ms=Kr((function(t,e){return sr(t,1,e)})),js=Kr((function(t,e,i){return sr(t,da(e)||0,i)}));function Ts(t,i){if("function"!=typeof t||null!=i&&"function"!=typeof i)throw new $t(e);var r=function(){var e=arguments,n=i?i.apply(this,e):e[0],o=r.cache;if(o.has(n))return o.get(n);var s=t.apply(this,e);return r.cache=o.set(n,s)||o,s};return r.cache=new(Ts.Cache||Ui),r}function As(t){if("function"!=typeof t)throw new $t(e);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}Ts.Cache=Ui;var _s=gn((function(t,e){var i=(e=1==e.length&&Ps(e[0])?Te(e[0],Ye(no())):Te(fr(e,1),Ye(no()))).length;return Kr((function(r){for(var n=-1,o=bi(r.length,i);++n<o;)r[n]=e[n].call(this,r[n]);return xe(t,this,r)}))})),Os=Kr((function(e,i){var r=oi(i,ro(Os));return Gn(e,n,t,i,r)})),Es=Kr((function(e,i){var r=oi(i,ro(Es));return Gn(e,64,t,i,r)})),Ds=Jn((function(e,i){return Gn(e,256,t,t,t,i)}));function Fs(t,e){return t===e||t!=t&&e!=e}var Ls=Vn(xr),Rs=Vn((function(t,e){return t>=e})),Ws=$r(function(){return arguments}())?$r:function(t){return Zs(t)&&_t.call(t,"callee")&&!Kt.call(t,"callee")},Ps=mt.isArray,Bs=ge?Ye(ge):function(t){return Zs(t)&&wr(t)==$};function Vs(t){return null!=t&&qs(t.length)&&!Gs(t)}function Us(t){return Zs(t)&&Vs(t)}var Ns=be||dl,Ks=ve?Ye(ve):function(t){return Zs(t)&&wr(t)==p};function Hs(t){if(!Zs(t))return!1;var e=wr(t);return e==b||"[object DOMException]"==e||"string"==typeof t.message&&"string"==typeof t.name&&!ta(t)}function Gs(t){if(!Xs(t))return!1;var e=wr(t);return e==g||e==v||"[object AsyncFunction]"==e||"[object Proxy]"==e}function Ys(t){return"number"==typeof t&&t==ha(t)}function qs(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=a}function Xs(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}function Zs(t){return null!=t&&"object"==typeof t}var Js=ke?Ye(ke):function(t){return Zs(t)&&ho(t)==k};function Qs(t){return"number"==typeof t||Zs(t)&&wr(t)==m}function ta(t){if(!Zs(t)||wr(t)!=y)return!1;var e=Ut(t);if(null===e)return!0;var i=_t.call(e,"constructor")&&e.constructor;return"function"==typeof i&&i instanceof i&&At.call(i)==Ft}var ea=me?Ye(me):function(t){return Zs(t)&&wr(t)==x},ia=ye?Ye(ye):function(t){return Zs(t)&&ho(t)==z};function ra(t){return"string"==typeof t||!Ps(t)&&Zs(t)&&wr(t)==C}function na(t){return"symbol"==typeof t||Zs(t)&&wr(t)==S}var oa=we?Ye(we):function(t){return Zs(t)&&qs(t.length)&&!!re[wr(t)]},sa=Vn(Or),aa=Vn((function(t,e){return t<=e}));function la(t){if(!t)return[];if(Vs(t))return ra(t)?ci(t):Sn(t);if(Yt&&t[Yt])return function(t){for(var e,i=[];!(e=t.next()).done;)i.push(e.value);return i}(t[Yt]());var e=ho(t);return(e==k?ri:e==z?si:Fa)(t)}function ca(t){return t?(t=da(t))===s||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}function ha(t){var e=ca(t),i=e%1;return e==e?i?e-i:e:0}function ua(t){return t?rr(ha(t),0,c):0}function da(t){if("number"==typeof t)return t;if(na(t))return l;if(Xs(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=Xs(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=Ge(t);var i=ut.test(t);return i||ft.test(t)?ae(t.slice(2),i?2:8):ht.test(t)?l:+t}function fa(t){return In(t,Ma(t))}function pa(t){return null==t?"":on(t)}var ba=Mn((function(t,e){if(yo(e)||Vs(e))In(e,$a(e),t);else for(var i in e)_t.call(e,i)&&Zi(t,i,e[i])})),ga=Mn((function(t,e){In(e,Ma(e),t)})),va=Mn((function(t,e,i,r){In(e,Ma(e),t,r)})),ka=Mn((function(t,e,i,r){In(e,$a(e),t,r)})),ma=Jn(ir),ya=Kr((function(e,i){e=Ct(e);var r=-1,n=i.length,o=n>2?i[2]:t;for(o&&go(i[0],i[1],o)&&(n=1);++r<n;)for(var s=i[r],a=Ma(s),l=-1,c=a.length;++l<c;){var h=a[l],u=e[h];(u===t||Fs(u,jt[h])&&!_t.call(e,h))&&(e[h]=s[h])}return e})),wa=Kr((function(e){return e.push(t,qn),xe(Ta,t,e)}));function xa(e,i,r){var n=null==e?t:mr(e,i);return n===t?r:n}function za(t,e){return null!=t&&uo(t,e,Cr)}var Ca=Ln((function(t,e,i){null!=e&&"function"!=typeof e.toString&&(e=Dt.call(e)),t[e]=i}),Xa(Qa)),Sa=Ln((function(t,e,i){null!=e&&"function"!=typeof e.toString&&(e=Dt.call(e)),_t.call(t,e)?t[e].push(i):t[e]=[i]}),no),Ia=Kr(Ir);function $a(t){return Vs(t)?Hi(t):_r(t)}function Ma(t){return Vs(t)?Hi(t,!0):function(t){if(!Xs(t))return function(t){var e=[];if(null!=t)for(var i in Ct(t))e.push(i);return e}(t);var e=yo(t),i=[];for(var r in t)("constructor"!=r||!e&&_t.call(t,r))&&i.push(r);return i}(t)}var ja=Mn((function(t,e,i){Lr(t,e,i)})),Ta=Mn((function(t,e,i,r){Lr(t,e,i,r)})),Aa=Jn((function(t,e){var i={};if(null==t)return i;var r=!1;e=Te(e,(function(e){return e=bn(e,t),r||(r=e.length>1),e})),In(t,to(t),i),r&&(i=nr(i,7,Xn));for(var n=e.length;n--;)an(i,e[n]);return i})),_a=Jn((function(t,e){return null==t?{}:function(t,e){return Pr(t,e,(function(e,i){return za(t,i)}))}(t,e)}));function Oa(t,e){if(null==t)return{};var i=Te(to(t),(function(t){return[t]}));return e=no(e),Pr(t,i,(function(t,i){return e(t,i[0])}))}var Ea=Hn($a),Da=Hn(Ma);function Fa(t){return null==t?[]:qe(t,$a(t))}var La=_n((function(t,e,i){return e=e.toLowerCase(),t+(i?Ra(e):e)}));function Ra(t){return Ha(pa(t).toLowerCase())}function Wa(t){return(t=pa(t))&&t.replace(bt,Qe).replace(Xt,"")}var Pa=_n((function(t,e,i){return t+(i?"-":"")+e.toLowerCase()})),Ba=_n((function(t,e,i){return t+(i?" ":"")+e.toLowerCase()})),Va=An("toLowerCase"),Ua=_n((function(t,e,i){return t+(i?"_":"")+e.toLowerCase()})),Na=_n((function(t,e,i){return t+(i?" ":"")+Ha(e)})),Ka=_n((function(t,e,i){return t+(i?" ":"")+e.toUpperCase()})),Ha=An("toUpperCase");function Ga(e,i,r){return e=pa(e),(i=r?t:i)===t?function(t){return te.test(t)}(e)?function(t){return t.match(Jt)||[]}(e):function(t){return t.match(ot)||[]}(e):e.match(i)||[]}var Ya=Kr((function(e,i){try{return xe(e,t,i)}catch(t){return Hs(t)?t:new wt(t)}})),qa=Jn((function(t,e){return Ce(e,(function(e){e=Oo(e),er(t,e,Ss(t[e],t))})),t}));function Xa(t){return function(){return t}}var Za=Dn(),Ja=Dn(!0);function Qa(t){return t}function tl(t){return Ar("function"==typeof t?t:nr(t,1))}var el=Kr((function(t,e){return function(i){return Ir(i,t,e)}})),il=Kr((function(t,e){return function(i){return Ir(t,i,e)}}));function rl(t,e,i){var r=$a(e),n=kr(e,r);null!=i||Xs(e)&&(n.length||!r.length)||(i=e,e=t,t=this,n=kr(e,$a(e)));var o=!(Xs(i)&&"chain"in i&&!i.chain),s=Gs(t);return Ce(n,(function(i){var r=e[i];t[i]=r,s&&(t.prototype[i]=function(){var e=this.__chain__;if(o||e){var i=t(this.__wrapped__);return(i.__actions__=Sn(this.__actions__)).push({func:r,args:arguments,thisArg:t}),i.__chain__=e,i}return r.apply(t,Ae([this.value()],arguments))})})),t}function nl(){}var ol=Wn(Te),sl=Wn(Ie),al=Wn(Ee);function ll(t){return vo(t)?Ve(Oo(t)):function(t){return function(e){return mr(e,t)}}(t)}var cl=Bn(),hl=Bn(!0);function ul(){return[]}function dl(){return!1}var fl,pl=Rn((function(t,e){return t+e}),0),bl=Nn("ceil"),gl=Rn((function(t,e){return t/e}),1),vl=Nn("floor"),kl=Rn((function(t,e){return t*e}),1),ml=Nn("round"),yl=Rn((function(t,e){return t-e}),0);return Fi.after=function(t,i){if("function"!=typeof i)throw new $t(e);return t=ha(t),function(){if(--t<1)return i.apply(this,arguments)}},Fi.ary=zs,Fi.assign=ba,Fi.assignIn=ga,Fi.assignInWith=va,Fi.assignWith=ka,Fi.at=ma,Fi.before=Cs,Fi.bind=Ss,Fi.bindAll=qa,Fi.bindKey=Is,Fi.castArray=function(){if(!arguments.length)return[];var t=arguments[0];return Ps(t)?t:[t]},Fi.chain=ls,Fi.chunk=function(e,i,r){i=(r?go(e,i,r):i===t)?1:pi(ha(i),0);var n=null==e?0:e.length;if(!n||i<1)return[];for(var o=0,s=0,a=mt(ue(n/i));o<n;)a[s++]=Jr(e,o,o+=i);return a},Fi.compact=function(t){for(var e=-1,i=null==t?0:t.length,r=0,n=[];++e<i;){var o=t[e];o&&(n[r++]=o)}return n},Fi.concat=function(){var t=arguments.length;if(!t)return[];for(var e=mt(t-1),i=arguments[0],r=t;r--;)e[r-1]=arguments[r];return Ae(Ps(i)?Sn(i):[i],fr(e,1))},Fi.cond=function(t){var i=null==t?0:t.length,r=no();return t=i?Te(t,(function(t){if("function"!=typeof t[1])throw new $t(e);return[r(t[0]),t[1]]})):[],Kr((function(e){for(var r=-1;++r<i;){var n=t[r];if(xe(n[0],this,e))return xe(n[1],this,e)}}))},Fi.conforms=function(t){return function(t){var e=$a(t);return function(i){return or(i,t,e)}}(nr(t,1))},Fi.constant=Xa,Fi.countBy=us,Fi.create=function(t,e){var i=Li(t);return null==e?i:tr(i,e)},Fi.curry=function e(i,r,n){var o=Gn(i,8,t,t,t,t,t,r=n?t:r);return o.placeholder=e.placeholder,o},Fi.curryRight=function e(i,r,n){var o=Gn(i,16,t,t,t,t,t,r=n?t:r);return o.placeholder=e.placeholder,o},Fi.debounce=$s,Fi.defaults=ya,Fi.defaultsDeep=wa,Fi.defer=Ms,Fi.delay=js,Fi.difference=Fo,Fi.differenceBy=Lo,Fi.differenceWith=Ro,Fi.drop=function(e,i,r){var n=null==e?0:e.length;return n?Jr(e,(i=r||i===t?1:ha(i))<0?0:i,n):[]},Fi.dropRight=function(e,i,r){var n=null==e?0:e.length;return n?Jr(e,0,(i=n-(i=r||i===t?1:ha(i)))<0?0:i):[]},Fi.dropRightWhile=function(t,e){return t&&t.length?cn(t,no(e,3),!0,!0):[]},Fi.dropWhile=function(t,e){return t&&t.length?cn(t,no(e,3),!0):[]},Fi.fill=function(e,i,r,n){var o=null==e?0:e.length;return o?(r&&"number"!=typeof r&&go(e,i,r)&&(r=0,n=o),function(e,i,r,n){var o=e.length;for((r=ha(r))<0&&(r=-r>o?0:o+r),(n=n===t||n>o?o:ha(n))<0&&(n+=o),n=r>n?0:ua(n);r<n;)e[r++]=i;return e}(e,i,r,n)):[]},Fi.filter=function(t,e){return(Ps(t)?$e:dr)(t,no(e,3))},Fi.flatMap=function(t,e){return fr(ms(t,e),1)},Fi.flatMapDeep=function(t,e){return fr(ms(t,e),s)},Fi.flatMapDepth=function(e,i,r){return r=r===t?1:ha(r),fr(ms(e,i),r)},Fi.flatten=Bo,Fi.flattenDeep=function(t){return null!=t&&t.length?fr(t,s):[]},Fi.flattenDepth=function(e,i){return null!=e&&e.length?fr(e,i=i===t?1:ha(i)):[]},Fi.flip=function(t){return Gn(t,512)},Fi.flow=Za,Fi.flowRight=Ja,Fi.fromPairs=function(t){for(var e=-1,i=null==t?0:t.length,r={};++e<i;){var n=t[e];er(r,n[0],n[1])}return r},Fi.functions=function(t){return null==t?[]:kr(t,$a(t))},Fi.functionsIn=function(t){return null==t?[]:kr(t,Ma(t))},Fi.groupBy=gs,Fi.initial=function(t){return null!=t&&t.length?Jr(t,0,-1):[]},Fi.intersection=Uo,Fi.intersectionBy=No,Fi.intersectionWith=Ko,Fi.invert=Ca,Fi.invertBy=Sa,Fi.invokeMap=vs,Fi.iteratee=tl,Fi.keyBy=ks,Fi.keys=$a,Fi.keysIn=Ma,Fi.map=ms,Fi.mapKeys=function(t,e){var i={};return e=no(e,3),gr(t,(function(t,r,n){er(i,e(t,r,n),t)})),i},Fi.mapValues=function(t,e){var i={};return e=no(e,3),gr(t,(function(t,r,n){er(i,r,e(t,r,n))})),i},Fi.matches=function(t){return Dr(nr(t,1))},Fi.matchesProperty=function(t,e){return Fr(t,nr(e,1))},Fi.memoize=Ts,Fi.merge=ja,Fi.mergeWith=Ta,Fi.method=el,Fi.methodOf=il,Fi.mixin=rl,Fi.negate=As,Fi.nthArg=function(t){return t=ha(t),Kr((function(e){return Rr(e,t)}))},Fi.omit=Aa,Fi.omitBy=function(t,e){return Oa(t,As(no(e)))},Fi.once=function(t){return Cs(2,t)},Fi.orderBy=function(e,i,r,n){return null==e?[]:(Ps(i)||(i=null==i?[]:[i]),Ps(r=n?t:r)||(r=null==r?[]:[r]),Wr(e,i,r))},Fi.over=ol,Fi.overArgs=_s,Fi.overEvery=sl,Fi.overSome=al,Fi.partial=Os,Fi.partialRight=Es,Fi.partition=ys,Fi.pick=_a,Fi.pickBy=Oa,Fi.property=ll,Fi.propertyOf=function(e){return function(i){return null==e?t:mr(e,i)}},Fi.pull=Go,Fi.pullAll=Yo,Fi.pullAllBy=function(t,e,i){return t&&t.length&&e&&e.length?Br(t,e,no(i,2)):t},Fi.pullAllWith=function(e,i,r){return e&&e.length&&i&&i.length?Br(e,i,t,r):e},Fi.pullAt=qo,Fi.range=cl,Fi.rangeRight=hl,Fi.rearg=Ds,Fi.reject=function(t,e){return(Ps(t)?$e:dr)(t,As(no(e,3)))},Fi.remove=function(t,e){var i=[];if(!t||!t.length)return i;var r=-1,n=[],o=t.length;for(e=no(e,3);++r<o;){var s=t[r];e(s,r,t)&&(i.push(s),n.push(r))}return Vr(t,n),i},Fi.rest=function(i,r){if("function"!=typeof i)throw new $t(e);return Kr(i,r=r===t?r:ha(r))},Fi.reverse=Xo,Fi.sampleSize=function(e,i,r){return i=(r?go(e,i,r):i===t)?1:ha(i),(Ps(e)?Yi:Gr)(e,i)},Fi.set=function(t,e,i){return null==t?t:Yr(t,e,i)},Fi.setWith=function(e,i,r,n){return n="function"==typeof n?n:t,null==e?e:Yr(e,i,r,n)},Fi.shuffle=function(t){return(Ps(t)?qi:Zr)(t)},Fi.slice=function(e,i,r){var n=null==e?0:e.length;return n?(r&&"number"!=typeof r&&go(e,i,r)?(i=0,r=n):(i=null==i?0:ha(i),r=r===t?n:ha(r)),Jr(e,i,r)):[]},Fi.sortBy=ws,Fi.sortedUniq=function(t){return t&&t.length?rn(t):[]},Fi.sortedUniqBy=function(t,e){return t&&t.length?rn(t,no(e,2)):[]},Fi.split=function(e,i,r){return r&&"number"!=typeof r&&go(e,i,r)&&(i=r=t),(r=r===t?c:r>>>0)?(e=pa(e))&&("string"==typeof i||null!=i&&!ea(i))&&!(i=on(i))&&ii(e)?vn(ci(e),0,r):e.split(i,r):[]},Fi.spread=function(t,i){if("function"!=typeof t)throw new $t(e);return i=null==i?0:pi(ha(i),0),Kr((function(e){var r=e[i],n=vn(e,0,i);return r&&Ae(n,r),xe(t,this,n)}))},Fi.tail=function(t){var e=null==t?0:t.length;return e?Jr(t,1,e):[]},Fi.take=function(e,i,r){return e&&e.length?Jr(e,0,(i=r||i===t?1:ha(i))<0?0:i):[]},Fi.takeRight=function(e,i,r){var n=null==e?0:e.length;return n?Jr(e,(i=n-(i=r||i===t?1:ha(i)))<0?0:i,n):[]},Fi.takeRightWhile=function(t,e){return t&&t.length?cn(t,no(e,3),!1,!0):[]},Fi.takeWhile=function(t,e){return t&&t.length?cn(t,no(e,3)):[]},Fi.tap=function(t,e){return e(t),t},Fi.throttle=function(t,i,r){var n=!0,o=!0;if("function"!=typeof t)throw new $t(e);return Xs(r)&&(n="leading"in r?!!r.leading:n,o="trailing"in r?!!r.trailing:o),$s(t,i,{leading:n,maxWait:i,trailing:o})},Fi.thru=cs,Fi.toArray=la,Fi.toPairs=Ea,Fi.toPairsIn=Da,Fi.toPath=function(t){return Ps(t)?Te(t,Oo):na(t)?[t]:Sn(_o(pa(t)))},Fi.toPlainObject=fa,Fi.transform=function(t,e,i){var r=Ps(t),n=r||Ns(t)||oa(t);if(e=no(e,4),null==i){var o=t&&t.constructor;i=n?r?new o:[]:Xs(t)&&Gs(o)?Li(Ut(t)):{}}return(n?Ce:gr)(t,(function(t,r,n){return e(i,t,r,n)})),i},Fi.unary=function(t){return zs(t,1)},Fi.union=Zo,Fi.unionBy=Jo,Fi.unionWith=Qo,Fi.uniq=function(t){return t&&t.length?sn(t):[]},Fi.uniqBy=function(t,e){return t&&t.length?sn(t,no(e,2)):[]},Fi.uniqWith=function(e,i){return i="function"==typeof i?i:t,e&&e.length?sn(e,t,i):[]},Fi.unset=function(t,e){return null==t||an(t,e)},Fi.unzip=ts,Fi.unzipWith=es,Fi.update=function(t,e,i){return null==t?t:ln(t,e,pn(i))},Fi.updateWith=function(e,i,r,n){return n="function"==typeof n?n:t,null==e?e:ln(e,i,pn(r),n)},Fi.values=Fa,Fi.valuesIn=function(t){return null==t?[]:qe(t,Ma(t))},Fi.without=is,Fi.words=Ga,Fi.wrap=function(t,e){return Os(pn(e),t)},Fi.xor=rs,Fi.xorBy=ns,Fi.xorWith=os,Fi.zip=ss,Fi.zipObject=function(t,e){return dn(t||[],e||[],Zi)},Fi.zipObjectDeep=function(t,e){return dn(t||[],e||[],Yr)},Fi.zipWith=as,Fi.entries=Ea,Fi.entriesIn=Da,Fi.extend=ga,Fi.extendWith=va,rl(Fi,Fi),Fi.add=pl,Fi.attempt=Ya,Fi.camelCase=La,Fi.capitalize=Ra,Fi.ceil=bl,Fi.clamp=function(e,i,r){return r===t&&(r=i,i=t),r!==t&&(r=(r=da(r))==r?r:0),i!==t&&(i=(i=da(i))==i?i:0),rr(da(e),i,r)},Fi.clone=function(t){return nr(t,4)},Fi.cloneDeep=function(t){return nr(t,5)},Fi.cloneDeepWith=function(e,i){return nr(e,5,i="function"==typeof i?i:t)},Fi.cloneWith=function(e,i){return nr(e,4,i="function"==typeof i?i:t)},Fi.conformsTo=function(t,e){return null==e||or(t,e,$a(e))},Fi.deburr=Wa,Fi.defaultTo=function(t,e){return null==t||t!=t?e:t},Fi.divide=gl,Fi.endsWith=function(e,i,r){e=pa(e),i=on(i);var n=e.length,o=r=r===t?n:rr(ha(r),0,n);return(r-=i.length)>=0&&e.slice(r,o)==i},Fi.eq=Fs,Fi.escape=function(t){return(t=pa(t))&&N.test(t)?t.replace(V,ti):t},Fi.escapeRegExp=function(t){return(t=pa(t))&&Q.test(t)?t.replace(Z,"\\$&"):t},Fi.every=function(e,i,r){var n=Ps(e)?Ie:hr;return r&&go(e,i,r)&&(i=t),n(e,no(i,3))},Fi.find=ds,Fi.findIndex=Wo,Fi.findKey=function(t,e){return Fe(t,no(e,3),gr)},Fi.findLast=fs,Fi.findLastIndex=Po,Fi.findLastKey=function(t,e){return Fe(t,no(e,3),vr)},Fi.floor=vl,Fi.forEach=ps,Fi.forEachRight=bs,Fi.forIn=function(t,e){return null==t?t:pr(t,no(e,3),Ma)},Fi.forInRight=function(t,e){return null==t?t:br(t,no(e,3),Ma)},Fi.forOwn=function(t,e){return t&&gr(t,no(e,3))},Fi.forOwnRight=function(t,e){return t&&vr(t,no(e,3))},Fi.get=xa,Fi.gt=Ls,Fi.gte=Rs,Fi.has=function(t,e){return null!=t&&uo(t,e,zr)},Fi.hasIn=za,Fi.head=Vo,Fi.identity=Qa,Fi.includes=function(t,e,i,r){t=Vs(t)?t:Fa(t),i=i&&!r?ha(i):0;var n=t.length;return i<0&&(i=pi(n+i,0)),ra(t)?i<=n&&t.indexOf(e,i)>-1:!!n&&Re(t,e,i)>-1},Fi.indexOf=function(t,e,i){var r=null==t?0:t.length;if(!r)return-1;var n=null==i?0:ha(i);return n<0&&(n=pi(r+n,0)),Re(t,e,n)},Fi.inRange=function(e,i,r){return i=ca(i),r===t?(r=i,i=0):r=ca(r),function(t,e,i){return t>=bi(e,i)&&t<pi(e,i)}(e=da(e),i,r)},Fi.invoke=Ia,Fi.isArguments=Ws,Fi.isArray=Ps,Fi.isArrayBuffer=Bs,Fi.isArrayLike=Vs,Fi.isArrayLikeObject=Us,Fi.isBoolean=function(t){return!0===t||!1===t||Zs(t)&&wr(t)==f},Fi.isBuffer=Ns,Fi.isDate=Ks,Fi.isElement=function(t){return Zs(t)&&1===t.nodeType&&!ta(t)},Fi.isEmpty=function(t){if(null==t)return!0;if(Vs(t)&&(Ps(t)||"string"==typeof t||"function"==typeof t.splice||Ns(t)||oa(t)||Ws(t)))return!t.length;var e=ho(t);if(e==k||e==z)return!t.size;if(yo(t))return!_r(t).length;for(var i in t)if(_t.call(t,i))return!1;return!0},Fi.isEqual=function(t,e){return Mr(t,e)},Fi.isEqualWith=function(e,i,r){var n=(r="function"==typeof r?r:t)?r(e,i):t;return n===t?Mr(e,i,t,r):!!n},Fi.isError=Hs,Fi.isFinite=function(t){return"number"==typeof t&&De(t)},Fi.isFunction=Gs,Fi.isInteger=Ys,Fi.isLength=qs,Fi.isMap=Js,Fi.isMatch=function(t,e){return t===e||jr(t,e,so(e))},Fi.isMatchWith=function(e,i,r){return r="function"==typeof r?r:t,jr(e,i,so(i),r)},Fi.isNaN=function(t){return Qs(t)&&t!=+t},Fi.isNative=function(t){if(mo(t))throw new wt("Unsupported core-js use. Try https://npms.io/search?q=ponyfill.");return Tr(t)},Fi.isNil=function(t){return null==t},Fi.isNull=function(t){return null===t},Fi.isNumber=Qs,Fi.isObject=Xs,Fi.isObjectLike=Zs,Fi.isPlainObject=ta,Fi.isRegExp=ea,Fi.isSafeInteger=function(t){return Ys(t)&&t>=-9007199254740991&&t<=a},Fi.isSet=ia,Fi.isString=ra,Fi.isSymbol=na,Fi.isTypedArray=oa,Fi.isUndefined=function(e){return e===t},Fi.isWeakMap=function(t){return Zs(t)&&ho(t)==I},Fi.isWeakSet=function(t){return Zs(t)&&"[object WeakSet]"==wr(t)},Fi.join=function(t,e){return null==t?"":Ue.call(t,e)},Fi.kebabCase=Pa,Fi.last=Ho,Fi.lastIndexOf=function(e,i,r){var n=null==e?0:e.length;if(!n)return-1;var o=n;return r!==t&&(o=(o=ha(r))<0?pi(n+o,0):bi(o,n-1)),i==i?function(t,e,i){for(var r=i+1;r--;)if(t[r]===e)return r;return r}(e,i,o):Le(e,Pe,o,!0)},Fi.lowerCase=Ba,Fi.lowerFirst=Va,Fi.lt=sa,Fi.lte=aa,Fi.max=function(e){return e&&e.length?ur(e,Qa,xr):t},Fi.maxBy=function(e,i){return e&&e.length?ur(e,no(i,2),xr):t},Fi.mean=function(t){return Be(t,Qa)},Fi.meanBy=function(t,e){return Be(t,no(e,2))},Fi.min=function(e){return e&&e.length?ur(e,Qa,Or):t},Fi.minBy=function(e,i){return e&&e.length?ur(e,no(i,2),Or):t},Fi.stubArray=ul,Fi.stubFalse=dl,Fi.stubObject=function(){return{}},Fi.stubString=function(){return""},Fi.stubTrue=function(){return!0},Fi.multiply=kl,Fi.nth=function(e,i){return e&&e.length?Rr(e,ha(i)):t},Fi.noConflict=function(){return he._===this&&(he._=Lt),this},Fi.noop=nl,Fi.now=xs,Fi.pad=function(t,e,i){t=pa(t);var r=(e=ha(e))?li(t):0;if(!e||r>=e)return t;var n=(e-r)/2;return Pn(de(n),i)+t+Pn(ue(n),i)},Fi.padEnd=function(t,e,i){t=pa(t);var r=(e=ha(e))?li(t):0;return e&&r<e?t+Pn(e-r,i):t},Fi.padStart=function(t,e,i){t=pa(t);var r=(e=ha(e))?li(t):0;return e&&r<e?Pn(e-r,i)+t:t},Fi.parseInt=function(t,e,i){return i||null==e?e=0:e&&(e=+e),vi(pa(t).replace(tt,""),e||0)},Fi.random=function(e,i,r){if(r&&"boolean"!=typeof r&&go(e,i,r)&&(i=r=t),r===t&&("boolean"==typeof i?(r=i,i=t):"boolean"==typeof e&&(r=e,e=t)),e===t&&i===t?(e=0,i=1):(e=ca(e),i===t?(i=e,e=0):i=ca(i)),e>i){var n=e;e=i,i=n}if(r||e%1||i%1){var o=ki();return bi(e+o*(i-e+se("1e-"+((o+"").length-1))),i)}return Ur(e,i)},Fi.reduce=function(t,e,i){var r=Ps(t)?_e:Ne,n=arguments.length<3;return r(t,no(e,4),i,n,lr)},Fi.reduceRight=function(t,e,i){var r=Ps(t)?Oe:Ne,n=arguments.length<3;return r(t,no(e,4),i,n,cr)},Fi.repeat=function(e,i,r){return i=(r?go(e,i,r):i===t)?1:ha(i),Nr(pa(e),i)},Fi.replace=function(){var t=arguments,e=pa(t[0]);return t.length<3?e:e.replace(t[1],t[2])},Fi.result=function(e,i,r){var n=-1,o=(i=bn(i,e)).length;for(o||(o=1,e=t);++n<o;){var s=null==e?t:e[Oo(i[n])];s===t&&(n=o,s=r),e=Gs(s)?s.call(e):s}return e},Fi.round=ml,Fi.runInContext=J,Fi.sample=function(t){return(Ps(t)?Gi:Hr)(t)},Fi.size=function(t){if(null==t)return 0;if(Vs(t))return ra(t)?li(t):t.length;var e=ho(t);return e==k||e==z?t.size:_r(t).length},Fi.snakeCase=Ua,Fi.some=function(e,i,r){var n=Ps(e)?Ee:Qr;return r&&go(e,i,r)&&(i=t),n(e,no(i,3))},Fi.sortedIndex=function(t,e){return tn(t,e)},Fi.sortedIndexBy=function(t,e,i){return en(t,e,no(i,2))},Fi.sortedIndexOf=function(t,e){var i=null==t?0:t.length;if(i){var r=tn(t,e);if(r<i&&Fs(t[r],e))return r}return-1},Fi.sortedLastIndex=function(t,e){return tn(t,e,!0)},Fi.sortedLastIndexBy=function(t,e,i){return en(t,e,no(i,2),!0)},Fi.sortedLastIndexOf=function(t,e){if(null!=t&&t.length){var i=tn(t,e,!0)-1;if(Fs(t[i],e))return i}return-1},Fi.startCase=Na,Fi.startsWith=function(t,e,i){return t=pa(t),i=null==i?0:rr(ha(i),0,t.length),e=on(e),t.slice(i,i+e.length)==e},Fi.subtract=yl,Fi.sum=function(t){return t&&t.length?Ke(t,Qa):0},Fi.sumBy=function(t,e){return t&&t.length?Ke(t,no(e,2)):0},Fi.template=function(e,i,r){var n=Fi.templateSettings;r&&go(e,i,r)&&(i=t),e=pa(e),i=ka({},i,n,Yn);var o=ka({},i.imports,n.imports,Yn),s=$a(o),a=qe(o,s);Ce(s,(function(t){if(st.test(t))throw new wt("Invalid `imports` option passed into `_.template`")}));var l,c,h=0,u=i.interpolate||gt,d="__p += '",f=St((i.escape||gt).source+"|"+u.source+"|"+(u===G?lt:gt).source+"|"+(i.evaluate||gt).source+"|$","g"),p="//# sourceURL="+(_t.call(i,"sourceURL")?(i.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++ie+"]")+"\n";e.replace(f,(function(t,i,r,n,o,s){return r||(r=n),d+=e.slice(h,s).replace(vt,ei),i&&(l=!0,d+="' +\n__e("+i+") +\n'"),o&&(c=!0,d+="';\n"+o+";\n__p += '"),r&&(d+="' +\n((__t = ("+r+")) == null ? '' : __t) +\n'"),h=s+t.length,t})),d+="';\n";var b=_t.call(i,"variable")&&i.variable;if(b){if(st.test(b))throw new wt("Invalid `variable` option passed into `_.template`")}else d="with (obj) {\n"+d+"\n}\n";d=(c?d.replace(R,""):d).replace(W,"$1").replace(P,"$1;"),d="function("+(b||"obj")+") {\n"+(b?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(l?", __e = _.escape":"")+(c?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+d+"return __p\n}";var g=Ya((function(){return xt(s,p+"return "+d).apply(t,a)}));if(g.source=d,Hs(g))throw g;return g},Fi.times=function(t,e){if((t=ha(t))<1||t>a)return[];var i=c,r=bi(t,c);e=no(e),t-=c;for(var n=He(r,e);++i<t;)e(i);return n},Fi.toFinite=ca,Fi.toInteger=ha,Fi.toLength=ua,Fi.toLower=function(t){return pa(t).toLowerCase()},Fi.toNumber=da,Fi.toSafeInteger=function(t){return t?rr(ha(t),-9007199254740991,a):0===t?t:0},Fi.toString=pa,Fi.toUpper=function(t){return pa(t).toUpperCase()},Fi.trim=function(e,i,r){if((e=pa(e))&&(r||i===t))return Ge(e);if(!e||!(i=on(i)))return e;var n=ci(e),o=ci(i);return vn(n,Ze(n,o),Je(n,o)+1).join("")},Fi.trimEnd=function(e,i,r){if((e=pa(e))&&(r||i===t))return e.slice(0,hi(e)+1);if(!e||!(i=on(i)))return e;var n=ci(e);return vn(n,0,Je(n,ci(i))+1).join("")},Fi.trimStart=function(e,i,r){if((e=pa(e))&&(r||i===t))return e.replace(tt,"");if(!e||!(i=on(i)))return e;var n=ci(e);return vn(n,Ze(n,ci(i))).join("")},Fi.truncate=function(e,i){var r=30,n="...";if(Xs(i)){var o="separator"in i?i.separator:o;r="length"in i?ha(i.length):r,n="omission"in i?on(i.omission):n}var s=(e=pa(e)).length;if(ii(e)){var a=ci(e);s=a.length}if(r>=s)return e;var l=r-li(n);if(l<1)return n;var c=a?vn(a,0,l).join(""):e.slice(0,l);if(o===t)return c+n;if(a&&(l+=c.length-l),ea(o)){if(e.slice(l).search(o)){var h,u=c;for(o.global||(o=St(o.source,pa(ct.exec(o))+"g")),o.lastIndex=0;h=o.exec(u);)var d=h.index;c=c.slice(0,d===t?l:d)}}else if(e.indexOf(on(o),l)!=l){var f=c.lastIndexOf(o);f>-1&&(c=c.slice(0,f))}return c+n},Fi.unescape=function(t){return(t=pa(t))&&U.test(t)?t.replace(B,ui):t},Fi.uniqueId=function(t){var e=++Ot;return pa(t)+e},Fi.upperCase=Ka,Fi.upperFirst=Ha,Fi.each=ps,Fi.eachRight=bs,Fi.first=Vo,rl(Fi,(fl={},gr(Fi,(function(t,e){_t.call(Fi.prototype,e)||(fl[e]=t)})),fl),{chain:!1}),Fi.VERSION="4.18.1",Ce(["bind","bindKey","curry","curryRight","partial","partialRight"],(function(t){Fi[t].placeholder=Fi})),Ce(["drop","take"],(function(e,i){Pi.prototype[e]=function(r){r=r===t?1:pi(ha(r),0);var n=this.__filtered__&&!i?new Pi(this):this.clone();return n.__filtered__?n.__takeCount__=bi(r,n.__takeCount__):n.__views__.push({size:bi(r,c),type:e+(n.__dir__<0?"Right":"")}),n},Pi.prototype[e+"Right"]=function(t){return this.reverse()[e](t).reverse()}})),Ce(["filter","map","takeWhile"],(function(t,e){var i=e+1,r=1==i||3==i;Pi.prototype[t]=function(t){var e=this.clone();return e.__iteratees__.push({iteratee:no(t,3),type:i}),e.__filtered__=e.__filtered__||r,e}})),Ce(["head","last"],(function(t,e){var i="take"+(e?"Right":"");Pi.prototype[t]=function(){return this[i](1).value()[0]}})),Ce(["initial","tail"],(function(t,e){var i="drop"+(e?"":"Right");Pi.prototype[t]=function(){return this.__filtered__?new Pi(this):this[i](1)}})),Pi.prototype.compact=function(){return this.filter(Qa)},Pi.prototype.find=function(t){return this.filter(t).head()},Pi.prototype.findLast=function(t){return this.reverse().find(t)},Pi.prototype.invokeMap=Kr((function(t,e){return"function"==typeof t?new Pi(this):this.map((function(i){return Ir(i,t,e)}))})),Pi.prototype.reject=function(t){return this.filter(As(no(t)))},Pi.prototype.slice=function(e,i){e=ha(e);var r=this;return r.__filtered__&&(e>0||i<0)?new Pi(r):(e<0?r=r.takeRight(-e):e&&(r=r.drop(e)),i!==t&&(r=(i=ha(i))<0?r.dropRight(-i):r.take(i-e)),r)},Pi.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},Pi.prototype.toArray=function(){return this.take(c)},gr(Pi.prototype,(function(e,i){var r=/^(?:filter|find|map|reject)|While$/.test(i),n=/^(?:head|last)$/.test(i),o=Fi[n?"take"+("last"==i?"Right":""):i],s=n||/^find/.test(i);o&&(Fi.prototype[i]=function(){var i=this.__wrapped__,a=n?[1]:arguments,l=i instanceof Pi,c=a[0],h=l||Ps(i),u=function(t){var e=o.apply(Fi,Ae([t],a));return n&&d?e[0]:e};h&&r&&"function"==typeof c&&1!=c.length&&(l=h=!1);var d=this.__chain__,f=s&&!d,p=l&&!this.__actions__.length;if(!s&&h){i=p?i:new Pi(this);var b=e.apply(i,a);return b.__actions__.push({func:cs,args:[u],thisArg:t}),new Wi(b,d)}return f&&p?e.apply(this,a):(b=this.thru(u),f?n?b.value()[0]:b.value():b)})})),Ce(["pop","push","shift","sort","splice","unshift"],(function(t){var e=Mt[t],i=/^(?:push|sort|unshift)$/.test(t)?"tap":"thru",r=/^(?:pop|shift)$/.test(t);Fi.prototype[t]=function(){var t=arguments;if(r&&!this.__chain__){var n=this.value();return e.apply(Ps(n)?n:[],t)}return this[i]((function(i){return e.apply(Ps(i)?i:[],t)}))}})),gr(Pi.prototype,(function(t,e){var i=Fi[e];if(i){var r=i.name+"";_t.call($i,r)||($i[r]=[]),$i[r].push({name:e,func:i})}})),$i[Fn(t,2).name]=[{name:"wrapper",func:t}],Pi.prototype.clone=function(){var t=new Pi(this.__wrapped__);return t.__actions__=Sn(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=Sn(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=Sn(this.__views__),t},Pi.prototype.reverse=function(){if(this.__filtered__){var t=new Pi(this);t.__dir__=-1,t.__filtered__=!0}else(t=this.clone()).__dir__*=-1;return t},Pi.prototype.value=function(){var t=this.__wrapped__.value(),e=this.__dir__,i=Ps(t),r=e<0,n=i?t.length:0,o=function(t,e,i){for(var r=-1,n=i.length;++r<n;){var o=i[r],s=o.size;switch(o.type){case"drop":t+=s;break;case"dropRight":e-=s;break;case"take":e=bi(e,t+s);break;case"takeRight":t=pi(t,e-s)}}return{start:t,end:e}}(0,n,this.__views__),s=o.start,a=o.end,l=a-s,c=r?a:s-1,h=this.__iteratees__,u=h.length,d=0,f=bi(l,this.__takeCount__);if(!i||!r&&n==l&&f==l)return hn(t,this.__actions__);var p=[];t:for(;l--&&d<f;){for(var b=-1,g=t[c+=e];++b<u;){var v=h[b],k=v.type,m=(0,v.iteratee)(g);if(2==k)g=m;else if(!m){if(1==k)continue t;break t}}p[d++]=g}return p},Fi.prototype.at=hs,Fi.prototype.chain=function(){return ls(this)},Fi.prototype.commit=function(){return new Wi(this.value(),this.__chain__)},Fi.prototype.next=function(){this.__values__===t&&(this.__values__=la(this.value()));var e=this.__index__>=this.__values__.length;return{done:e,value:e?t:this.__values__[this.__index__++]}},Fi.prototype.plant=function(e){for(var i,r=this;r instanceof Ri;){var n=Do(r);n.__index__=0,n.__values__=t,i?o.__wrapped__=n:i=n;var o=n;r=r.__wrapped__}return o.__wrapped__=e,i},Fi.prototype.reverse=function(){var e=this.__wrapped__;if(e instanceof Pi){var i=e;return this.__actions__.length&&(i=new Pi(this)),(i=i.reverse()).__actions__.push({func:cs,args:[Xo],thisArg:t}),new Wi(i,this.__chain__)}return this.thru(Xo)},Fi.prototype.toJSON=Fi.prototype.valueOf=Fi.prototype.value=function(){return hn(this.__wrapped__,this.__actions__)},Fi.prototype.first=Fi.prototype.head,Yt&&(Fi.prototype[Yt]=function(){return this}),Fi}();de?((de.exports=di)._=di,ue._=di):he._=di}.call(zt.exports)),zt.exports);
|
|
2
|
+
/**
|
|
3
|
+
* @license
|
|
4
|
+
* Lodash <https://lodash.com/>
|
|
5
|
+
* Copyright OpenJS Foundation and other contributors <https://openjsf.org/>
|
|
6
|
+
* Released under MIT license <https://lodash.com/license>
|
|
7
|
+
* Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
|
|
8
|
+
* Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
|
|
9
|
+
*/class St{_core;_debounceUpdate;_debounceEndScaling;_animationFrameId=null;initialTouchDistance=0;startX=0;startY=0;static TOUCH_CURSOR_BROADCAST_THRESHOLD=5;_touchStartScreenX=0;_touchStartScreenY=0;_touchCursorBroadcastActive=!1;constructor(t,e){this._core=t,this._core.store.state.host=e,this._core.store.state.viewportWidth=e.clientWidth,this._core.store.state.viewportHeight=e.clientHeight,this._core.store.state.startX=0,this._core.store.state.startY=0,this._core.store.state.translateX=0,this._core.store.state.translateY=0,this._debounceUpdate=Ct.debounce((()=>{this._core.updateWorkspaceViewport(this._core.store.state.translateX,this._core.store.state.translateY,this._core.store.state.scale)}),300),this._debounceEndScaling=Ct.debounce((()=>{this._core.store.state.isScaling=!1,this._core.rerender()}),100)}cancelPendingUpdates(){this._debounceUpdate.cancel()}clampTranslate(t,e){const i=this._core.store.state,{scale:r,viewportWidth:n,viewportHeight:o}=i,{viewportBoundaryLeft:s,viewportBoundaryRight:a,viewportBoundaryTop:l,viewportBoundaryBottom:c}=i,h=-s*r,u=n-a*r,d=-l*r,f=o-c*r;let p=t,b=e;return Number.isFinite(u)&&Number.isFinite(h)?p=Math.max(u,Math.min(h,t)):Number.isFinite(u)?p=Math.max(u,t):Number.isFinite(h)&&(p=Math.min(h,t)),Number.isFinite(f)&&Number.isFinite(d)?b=Math.max(f,Math.min(d,e)):Number.isFinite(f)?b=Math.max(f,e):Number.isFinite(d)&&(b=Math.min(d,e)),{translateX:p,translateY:b}}getEffectiveMinScale(){const t=this._core.store.state,{viewportWidth:e,viewportHeight:i,scaleMin:r}=t,{viewportBoundaryLeft:n,viewportBoundaryRight:o,viewportBoundaryTop:s,viewportBoundaryBottom:a}=t,l=o-n,c=a-s;if(!Number.isFinite(l)||!Number.isFinite(c))return r;const h=Math.max(l>0?e/l:r,c>0?i/c:r);return Math.max(r,h)}handleResize(){this._core.store.state.viewportWidth=this._core.store.host.clientWidth,this._core.store.state.viewportHeight=this._core.store.host.clientHeight,this._core.store.state.hasViewportChanged=!0,this._core.rerender()}handlePointerDown(t){if(this.cancelViewportAnimation(),"mouse"===t.pointerType){const e=t.clientX-this._core.store.offsetX,i=t.clientY-this._core.store.offsetY;t.button===p.Right&&(this._core.store.state.isPanning=!0,this._core.store.state.startX=e,this._core.store.state.startY=i)}if("touch"===t.pointerType||"pen"===t.pointerType){const e=Array.from(this._core.store.state.pointers.values());if(1===e.length&&(this._touchStartScreenX=t.clientX,this._touchStartScreenY=t.clientY,this._touchCursorBroadcastActive=!1),2===e.length){this._core.store.objects?.clearCursorPosition();const t=this._core.store.currentPath;t&&this._core.store.objects.remove((e=>e.id===t.id)),this._core.store.state.isSelecting&&(this._core.store.state.isSelecting=!1,this._core.store.objects.remove((t=>t instanceof I)),this._core.store.setSelectionBox(null),this._core.store.selectedObjects.forEach((t=>{t.isSelected=!1}))),this._core.store.state.isScaling=!0;const i=e[0].clientX-this._core.store.offsetX,r=e[0].clientY-this._core.store.offsetY,n=e[1].clientX-this._core.store.offsetX,o=e[1].clientY-this._core.store.offsetY;this.initialTouchDistance=Math.sqrt(Math.pow(i-n,2)+Math.pow(r-o,2)),this.startX=(i+n)/2,this.startY=(r+o)/2,this._core.rerender()}}}handlePointerMove(t){if("mouse"===t.pointerType){const e=this._core.store.host.getBoundingClientRect(),i=t.clientX-e.left,r=t.clientY-e.top;if(this._core.store.state.pointerX=(i-this._core.store.state.translateX)/this._core.store.state.scale,this._core.store.state.pointerY=(r-this._core.store.state.translateY)/this._core.store.state.scale,this._core.store.objects?.updateCursorPosition(this._core.store.state.pointerX,this._core.store.state.pointerY),this._core.store.state.isPanning){const t=this.clampTranslate(this._core.store.state.translateX+(i-this._core.store.state.startX),this._core.store.state.translateY+(r-this._core.store.state.startY));this._core.store.state.translateX=t.translateX,this._core.store.state.translateY=t.translateY,this._core.store.state.startX=i,this._core.store.state.startY=r,this._core.store.state.hasViewportChanged=!0,this._core.store.state.skipContextMenu=!0,this._core.rerender(),this._debounceUpdate()}}if("touch"===t.pointerType||"pen"===t.pointerType){const e=this._core.store.host.getBoundingClientRect(),i=t.clientX-e.left,r=t.clientY-e.top,n=Array.from(this._core.store.state.pointers.values());if(this._core.store.state.isScaling||n.length>1)this._core.store.objects?.clearCursorPosition();else{if(this._core.store.state.pointerX=(i-this._core.store.state.translateX)/this._core.store.state.scale,this._core.store.state.pointerY=(r-this._core.store.state.translateY)/this._core.store.state.scale,!this._touchCursorBroadcastActive){const e=t.clientX-this._touchStartScreenX,i=t.clientY-this._touchStartScreenY;Math.sqrt(e*e+i*i)>=St.TOUCH_CURSOR_BROADCAST_THRESHOLD&&(this._touchCursorBroadcastActive=!0)}this._touchCursorBroadcastActive&&this._core.store.objects?.updateCursorPosition(this._core.store.state.pointerX,this._core.store.state.pointerY)}if(2===n.length){const t=n[0].clientX-this._core.store.offsetX,e=n[0].clientY-this._core.store.offsetY,i=n[1].clientX-this._core.store.offsetX,r=n[1].clientY-this._core.store.offsetY,o=Math.sqrt(Math.pow(t-i,2)+Math.pow(e-r,2)),s=(t+i)/2,a=(e+r)/2,l=o/this.initialTouchDistance,c=this._core.store.state.scale*l,h=this.getEffectiveMinScale();if(c>this._core.store.state.scaleMax||c<h){const t=this.clampTranslate(this._core.store.state.translateX+s-this.startX,this._core.store.state.translateY+a-this.startY);this._core.store.state.translateX=t.translateX,this._core.store.state.translateY=t.translateY}else{const t=this._core.store.state.translateX+s-this.startX-(s-this._core.store.state.translateX)*(l-1),e=this._core.store.state.translateY+a-this.startY-(a-this._core.store.state.translateY)*(l-1);this._core.store.state.scale=c;const i=this.clampTranslate(t,e);this._core.store.state.translateX=i.translateX,this._core.store.state.translateY=i.translateY,this.initialTouchDistance=o}this.startX=s,this.startY=a,this._core.store.state.hasViewportChanged=!0,this._core.rerender(),this._debounceUpdate()}}}handlePointerUp(t){"mouse"===t.pointerType&&this._core.store.state.isPanning&&(this._core.store.state.isPanning=!1,this._core.rerender()),"touch"!==t.pointerType&&"pen"!==t.pointerType||(this._touchCursorBroadcastActive=!1,0===this._core.store.state.pointers.size&&this._debounceEndScaling())}handleWheel(t){this.cancelViewportAnimation(),t.ctrlKey?this.handleZoom(t):this.handlePan(t)}getViewport(){const t=this._core.store.state;return{translateX:t.translateX,translateY:t.translateY,scale:t.scale,width:t.viewportWidth,height:t.viewportHeight}}screenToWorld(t,e){const i=this._core.store.state;return{x:(t-i.translateX)/i.scale,y:(e-i.translateY)/i.scale}}worldToScreen(t,e){const i=this._core.store.state;return{x:t*i.scale+i.translateX,y:e*i.scale+i.translateY}}setViewport(t,e,i){const r=this._core.store.state,n=Math.min(r.scaleMax,Math.max(this.getEffectiveMinScale(),i));this.animateViewportTo(r.viewportWidth/2-t*n,r.viewportHeight/2-e*n,n)}panTo(t,e){this.setViewport(t,e,this._core.store.state.scale)}zoomTo(t,e,i){const r=this._core.store.state;void 0!==e&&void 0!==i?this.setViewport(e,i,t):this.setViewport((r.viewportWidth/2-r.translateX)/r.scale,(r.viewportHeight/2-r.translateY)/r.scale,t)}centerInViewport(t){const{scale:e,viewportWidth:i,viewportHeight:r}=this._core.store.state,{x:n,y:o,width:s,height:a}=t.rotatedBoundingBox,l=this.clampTranslate(i/2-(n+s/2)*e,r/2-(o+a/2)*e);this._core.store.state.translateX=l.translateX,this._core.store.state.translateY=l.translateY,this._core.store.state.hasViewportChanged=!0,this._core.rerender(),this._debounceUpdate()}centerFitInViewport(t){const e=Math.min(this._core.store.state.viewportWidth/(1.1*t.rotatedBoundingBox.width),this._core.store.state.viewportHeight/(1.1*t.rotatedBoundingBox.height),this._core.store.state.scaleMax),i=Math.max(e,this.getEffectiveMinScale());this._core.store.state.scale=i,this.centerInViewport(t)}handleZoom(t){this._core.store.state.isScaling=!0;const e=this._core.store.host.getBoundingClientRect(),i=t.clientX-e.left,r=t.clientY-e.top;this._core.store.state.pointerX=(i-this._core.store.state.translateX)/this._core.store.state.scale,this._core.store.state.pointerY=(r-this._core.store.state.translateY)/this._core.store.state.scale,this._core.store.objects?.updateCursorPosition(this._core.store.state.pointerX,this._core.store.state.pointerY);const n=Math.max(.8,Math.min(1.2,1+-.012*t.deltaY)),o=this.getEffectiveMinScale(),s=Math.min(this._core.store.state.scaleMax,Math.max(o,this._core.store.state.scale*n)),a=s/this._core.store.state.scale,l=(i-this._core.store.state.translateX)*(a-1),c=(r-this._core.store.state.translateY)*(a-1);this._core.store.state.scale=s;let h=this._core.store.state.translateX-l;0!==t.deltaX&&(h-=.8*t.deltaX);const u=this.clampTranslate(h,this._core.store.state.translateY-c);this._core.store.state.translateX=u.translateX,this._core.store.state.translateY=u.translateY,this._core.store.state.hasViewportChanged=!0,this._core.rerender(),this._debounceUpdate(),this._debounceEndScaling()}handlePan(t){const e=this.clampTranslate(this._core.store.state.translateX-.8*t.deltaX,this._core.store.state.translateY-.8*t.deltaY);this._core.store.state.translateX=e.translateX,this._core.store.state.translateY=e.translateY,this._core.store.state.hasViewportChanged=!0,this._core.rerender(),this._debounceUpdate()}cancelViewportAnimation(){null!==this._animationFrameId&&(cancelAnimationFrame(this._animationFrameId),this._animationFrameId=null)}animateViewportTo(t,e,i,r=150){this.cancelViewportAnimation();const n=this._core.store.state.translateX,o=this._core.store.state.translateY,s=this._core.store.state.scale,a=performance.now();this._core.store.state.isScaling=!0;const l=c=>{const h=Math.min((c-a)/r,1),u=1-Math.pow(1-h,3);this._core.store.state.scale=s+(i-s)*u;const d=this.clampTranslate(n+(t-n)*u,o+(e-o)*u);this._core.store.state.translateX=d.translateX,this._core.store.state.translateY=d.translateY,this._core.store.state.hasViewportChanged=!0,this._core.rerender(),h<1?this._animationFrameId=requestAnimationFrame(l):(this._animationFrameId=null,this._core.store.state.isScaling=!1,this._core.rerender(),this._debounceUpdate())};this._animationFrameId=requestAnimationFrame(l)}centerFitNearestContent(t=20){const e=this._core.store.allNonSelectionObjects;if(0===e.length)return!1;const i=-this._core.store.state.translateX/this._core.store.state.scale+this._core.store.state.viewportWidth/2/this._core.store.state.scale,r=-this._core.store.state.translateY/this._core.store.state.scale+this._core.store.state.viewportHeight/2/this._core.store.state.scale,n=e.map((t=>{const e=t.rotatedBoundingBox,n=e.y+e.height/2;return{obj:t,distance:Math.sqrt(Math.pow(e.x+e.width/2-i,2)+Math.pow(n-r,2))}}));n.sort(((t,e)=>t.distance-e.distance));const o=n.slice(0,t).map((t=>t.obj));let s=1/0,a=1/0,l=-1/0,c=-1/0;for(const t of o){const e=t.rotatedBoundingBox;s=Math.min(s,e.x),a=Math.min(a,e.y),l=Math.max(l,e.x+e.width),c=Math.max(c,e.y+e.height)}const h=l-s,u=c-a,d=s+h/2,f=a+u/2,p=Math.min(this._core.store.state.viewportWidth/(1.1*h),this._core.store.state.viewportHeight/(1.1*u),this._core.store.state.scaleMax),b=Math.max(p,this.getEffectiveMinScale());return this.animateViewportTo(this._core.store.state.viewportWidth/2-d*b,this._core.store.state.viewportHeight/2-f*b,b),!0}centerFitAllObjects(t=!0){const e=this._core.store.allNonSelectionObjects;if(0===e.length)return!1;let i=1/0,r=1/0,n=-1/0,o=-1/0;for(const t of e){const e=t.rotatedBoundingBox;i=Math.min(i,e.x),r=Math.min(r,e.y),n=Math.max(n,e.x+e.width),o=Math.max(o,e.y+e.height)}const s=n-i,a=o-r,l=i+s/2,c=r+a/2,h=Math.min(this._core.store.state.viewportWidth/(1.1*s),this._core.store.state.viewportHeight/(1.1*a),this._core.store.state.scaleMax),u=Math.max(h,this.getEffectiveMinScale());return this.animateViewportTo(this._core.store.state.viewportWidth/2-l*u,this._core.store.state.viewportHeight/2-c*u,u,t?150:0),!0}}class It extends j{shortcuts=[{key:"Escape",label:"Clear Selection",category:"General",condition:t=>!!t.store.activeText||!!t.store.activeShape||!!t.store.selectionGroup,action:t=>{t.store.activeText?t.store.activeText.handleEscape():t.store.activeShape?t.store.activeShape.handleEscape():t.clearSelection()}},{key:"Delete",label:"Delete Selected",category:"General",condition:t=>!!t.store.selectionGroup,action:t=>t.delete()},{key:"a",ctrl:!0,label:"Select All in Viewport",category:"General",action:t=>t.selectAllObjectsInViewport()},{key:"A",ctrl:!0,shift:!0,label:"Select All Objects",category:"General",action:t=>t.selectAllObjects()},{key:"z",ctrl:!0,label:"Undo",category:"Undo/Redo",action:t=>t.undo()},{key:"y",ctrl:!0,label:"Redo",category:"Undo/Redo",action:t=>t.redo()},{key:"1",ctrl:!0,label:"Tool 1",category:"Tool Selection",action:()=>this.switchToolByIndex(0)},{key:"2",ctrl:!0,label:"Tool 2",category:"Tool Selection",action:()=>this.switchToolByIndex(1)},{key:"3",ctrl:!0,label:"Tool 3",category:"Tool Selection",action:()=>this.switchToolByIndex(2)},{key:"4",ctrl:!0,label:"Tool 4",category:"Tool Selection",action:()=>this.switchToolByIndex(3)},{key:"5",ctrl:!0,label:"Tool 5",category:"Tool Selection",action:()=>this.switchToolByIndex(4)},{key:"6",ctrl:!0,label:"Tool 6",category:"Tool Selection",action:()=>this.switchToolByIndex(5)},{key:"7",ctrl:!0,label:"Tool 7",category:"Tool Selection",action:()=>this.switchToolByIndex(6)},{key:"8",ctrl:!0,label:"Tool 8",category:"Tool Selection",action:()=>this.switchToolByIndex(7)},{key:"9",ctrl:!0,label:"Tool 9",category:"Tool Selection",action:()=>this.switchToolByIndex(8)},{key:"c",ctrl:!0,label:"Copy",category:"Clipboard",condition:t=>!!t.store.selectionGroup,action:t=>{t.copy(),t.rerender()}},{key:"x",ctrl:!0,label:"Cut",category:"Clipboard",condition:t=>!!t.store.selectionGroup,action:t=>t.cut()},{key:"v",ctrl:!0,label:"Paste",category:"Clipboard",condition:t=>!!t.store.state.copiedObjects&&!t.store.activeText&&!t.store.activeShape,action:t=>t.paste()},{key:"+",ctrl:!0,label:"Bring Forward",category:"Object Layering",condition:t=>!!t.store.selectionGroup,action:t=>t.bringForward()},{key:"-",ctrl:!0,label:"Send Backward",category:"Object Layering",condition:t=>!!t.store.selectionGroup,action:t=>t.sendBackward()},{key:"*",shift:!0,label:"Bring to Front",category:"Object Layering",condition:t=>!!t.store.selectionGroup,action:t=>t.bringToFront()},{key:"_",shift:!0,label:"Send to Back",category:"Object Layering",condition:t=>!!t.store.selectionGroup,action:t=>t.sendToBack()},{key:"g",ctrl:!0,label:"Group",category:"Grouping",condition:t=>!!t.store.selectionGroup&&t.store.selectionGroup.objects.length>=2,action:t=>t.group()},{key:"G",ctrl:!0,shift:!0,label:"Ungroup",category:"Grouping",condition:t=>!!t.store.selectionGroup,action:t=>t.ungroup()},{key:"ArrowUp",label:"Move Object Up",category:"Movement",condition:t=>!!t.store.selectionGroup,action:t=>{t.store.selectionGroup.move(0,0,0,10),t.rerender()}},{key:"ArrowDown",label:"Move Object Down",category:"Movement",condition:t=>!!t.store.selectionGroup,action:t=>{t.store.selectionGroup.move(0,10,0,0),t.rerender()}},{key:"ArrowLeft",label:"Move Object Left",category:"Movement",condition:t=>!!t.store.selectionGroup,action:t=>{t.store.selectionGroup.move(0,0,10,0),t.rerender()}},{key:"ArrowRight",label:"Move Object Right",category:"Movement",condition:t=>!!t.store.selectionGroup,action:t=>{t.store.selectionGroup.move(10,0,0,0),t.rerender()}}];constructor(t){super(t)}switchToolByIndex(t){const e=T.getToolByIndex(t);e&&(this._core.store.setState("activeTool",e),this._core.deselectAllObjects(),e.onActivate())}handleKeyDown(t){if(this._core.store.state.isCtrlKeyPressed=t.ctrlKey,(this._core.store.activeText||this._core.store.activeShape)&&"Escape"!==t.key)return;const e=this.shortcuts.find((e=>e.key===t.key&&!!e.ctrl===t.ctrlKey&&!!e.shift===t.shiftKey&&(!e.condition||e.condition(this._core))));e&&(t.preventDefault(),e.action(this._core))}handleKeyUp(t){this._core.store.state.isCtrlKeyPressed=t.ctrlKey}getDisplayableShortcuts(){return this.shortcuts.map((({key:t,ctrl:e,shift:i,label:r,category:n})=>({key:t,ctrl:e,shift:i,label:r,category:n})))}}class $t extends j{globalContextMenuItems=[];objectContextMenuItems=[];constructor(t,e,i){super(t),this.globalContextMenuItems=e,this.objectContextMenuItems=i}handleContextMenu(t){if(!(this._core.store.state.activeTool instanceof l))return;if(this._core.store.state.skipContextMenu)return void(this._core.store.state.skipContextMenu=!1);const e=this._core.store.state.activeTool;e?.moveHandler?.cancelPendingDrag(),this._core.store.selectionBox&&(this._core.store.objects.remove((t=>t instanceof I)),this._core.store.setSelectionBox(null),this._core.store.state.isSelecting=!1);const i=this._core.getObjectFromPointerEvent(t,".object");if(i&&!(i instanceof S)&&!(i instanceof I)){const t=S.create(this._core);t.addOrRemove(i),t.isSelected=!0,t.rotation=i.rotation,this._core.store.state.isSelecting=!1,this._core.store.selectionGroup&&this._core.removeSelectionGroup(),this._core.addSelectionGroup(t),this._core.rerender()}this._core.store.state.contextMenuItems=this._core.store.selectionGroup?this.objectContextMenuItems:this.globalContextMenuItems;let r=t.clientX-this._core.store.offsetX,n=t.clientY-this._core.store.offsetY;const o=10;r+150>window.innerWidth-o&&(r=window.innerWidth-150-o),n+200>window.innerHeight-o&&(n=window.innerHeight-200-o),r=Math.max(o,r),n=Math.max(o,n),this._core.store.state.contextMenuX=r,this._core.store.state.contextMenuY=n,this._core.store.state.isContextMenuVisible=!0,this._core.store.state.isEnabled=!1,this._core.rerender()}}class Mt extends A{__class__="KritzelCustomElement";element;isInteractive=!0;constructor(t){super(),t&&(this.translateX=t.translateX||0,this.translateY=t.translateY||0,this.scale=t.scale||1,this.element=t.element,this.height=t.height||0,this.width=t.width||0)}static create(t,e){const i=new Mt(e);return i._core=t,i.id=i.generateId(),i.workspaceId=t.store.state.activeWorkspace.id,i.userId=t.user?.id,i}mount(t){null!==t&&(this.isMounted&&this.elementRef===t&&this.element.parentElement===t||(this.elementRef=t,this.isMounted=!0,this.elementRef.innerHTML="",this.elementRef.appendChild(this.element)))}resize(t,e,i,r){i<=1||r<=1||(this.width=i,this.height=r,this.translateX=t,this.translateY=e,this.element&&(this.element.style.width=`${i}px`,this.element.style.height=`${r}px`),this._core.store.objects.update(this))}copy(){const t=Object.create(Object.getPrototypeOf(this));return Object.assign(t,this),t.id=this.generateId(),t.isMounted=!1,t.element=this.element.cloneNode(!0),t}}class jt{_core;constructor(t){this._core=t}revive(t){if(t&&"object"==typeof t){if(t.__class__){let e;switch(t.__class__){case"KritzelPath":e=o.create(this._core).deserialize(t);break;case"KritzelLine":e=s.create(this._core).deserialize(t);break;case"KritzelText":e=F.create(this._core,t.fontSize,t.fontFamily).deserialize(t);break;case"KritzelShape":e=D.create(this._core,{shapeType:t.shapeType,fillColor:t.fillColor,strokeColor:t.strokeColor,strokeWidth:t.strokeWidth,fontSize:t.fontSize,fontFamily:t.fontFamily,fontColor:t.fontColor}).deserialize(t);break;case"KritzelImage":e=E.create(this._core).deserialize(t);break;case"KritzelCustomElement":e=Mt.create(this._core).deserialize(t);break;case"KritzelSelectionGroup":e=S.create(this._core).deserialize(t);break;case"KritzelGroup":e=O.create(this._core).deserialize(t);break;case"KritzelWorkspace":e=_.create(this._core,t).deserialize(t);break;case"KritzelBrushTool":e=new c(this._core);break;case"KritzelEraserTool":e=new m(this._core);break;case"KritzelImageTool":e=new x(this._core);break;case"KritzelSelectionTool":e=new l(this._core);break;case"KritzelTextTool":e=new d(this._core);break;case"KritzelLineTool":e=new h(this._core);break;case"KritzelShapeTool":e=new u(this._core);break;default:e=t}return e}const e=Array.isArray(t)?[]:{};for(const i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=this.revive(t[i]));return e}return t}}const Tt={activeWorkspace:void 0,activeTool:null,copiedObjects:null,objects:null,snapCandidate:null,resizeHandleType:null,lineHandleType:null,hasViewportChanged:!1,hasObjectsChanged:!1,isReady:!1,isEnabled:!0,isScaling:!1,isPanning:!1,isSelecting:!1,isResizing:!1,isResizeHandleHovered:!1,isResizeHandleSelected:!1,isRotating:!1,isRotationHandleHovered:!1,isRotationHandleSelected:!1,isLineHandleSelected:!1,isLineHandleDragging:!1,isDragging:!1,isDrawing:!1,isErasing:!1,isWriting:!1,isLoading:!1,isCtrlKeyPressed:!1,isContextMenuVisible:!1,contextMenuItems:[],contextMenuX:0,contextMenuY:0,skipContextMenu:!1,debugInfo:{showObjectInfo:!1,showViewportInfo:!1,showSyncProviderInfo:!0,showMigrationInfo:!0},host:null,pointerX:0,pointerY:0,scale:1,scaleMax:1,scaleMin:1,startX:0,startY:0,translateX:0,translateXMax:400,translateXMin:0,translateY:0,translateYMax:400,translateYMin:0,viewportWidth:0,viewportHeight:0,longTouchTimeout:null,longTouchDelay:300,pointers:new Map,workspaces:[],cursor:{icon:"default",iconActive:"default"},lockDrawingScale:!0,viewportBoundaryLeft:-1/0,viewportBoundaryRight:1/0,viewportBoundaryTop:-1/0,viewportBoundaryBottom:1/0};class At{static calculateSelectionBounds(t){const e=t.map((t=>t.rotatedBoundingBox));return{minX:Math.min(...e.map((t=>t.x))),minY:Math.min(...e.map((t=>t.y))),maxX:Math.max(...e.map((t=>t.x+t.width))),maxY:Math.max(...e.map((t=>t.y+t.height)))}}static calculateAlignedPositions(t,e){const i=new Map;if(t.length<2)return i;const r=this.calculateSelectionBounds(t);for(const n of t){const t=n.rotatedBoundingBox;let o=n.translateX,s=n.translateY;const a=t.x-n.translateX,l=t.y-n.translateY;switch(e){case z.StartHorizontal:o=r.minX-a;break;case z.CenterHorizontal:o=n.translateX+((r.minX+r.maxX)/2-(t.x+t.width/2));break;case z.EndHorizontal:o=n.translateX+(r.maxX-(t.x+t.width));break;case z.StartVertical:s=r.minY-l;break;case z.CenterVertical:s=n.translateY+((r.minY+r.maxY)/2-(t.y+t.height/2));break;case z.EndVertical:s=n.translateY+(r.maxY-(t.y+t.height))}i.set(n.id,{translateX:o,translateY:s})}return i}}class _t{bounds;capacity;objects=[];children=null;_size=0;get size(){return this._size}constructor(t,e=16){this.bounds=t,this.capacity=e}reset(){this.objects=[],this.children=null,this._size=0}insert(t){if(!this.intersects(t.rotatedBoundingBox,this.bounds))return!1;if(this.objects.length<this.capacity&&null===this.children)return this.objects.push(t),this._size++,!0;null===this.children&&this.subdivide();for(const e of this.children)if(e.insert(t))return this._size++,!0;return!1}update(t){const e=this.objects.findIndex((e=>e.id===t.id));if(-1!==e)return this.objects[e]=t,!0;if(null!==this.children)for(const e of this.children)if(e.update(t))return!0;return!1}remove(t){let e=0;const i=this.objects.findIndex((e=>t(e)));if(-1!==i&&(this.objects.splice(i,1),e++),null!==this.children)for(const i of this.children)e+=i.remove(t);return this._size-=e,e}query(t){const e=[];return this._queryInto(t,e),e}_queryInto(t,e){if(this.intersects(t,this.bounds)){for(const i of this.objects)this.intersects(i.rotatedBoundingBox,t)&&e.push(i);if(null!==this.children)for(const i of this.children)i._queryInto(t,e)}}filter(t){const e=[];return this._filterInto(t,e),e}_filterInto(t,e){for(const i of this.objects)t(i)&&e.push(i);if(null!==this.children)for(const i of this.children)i._filterInto(t,e)}allObjects(){const t=[];return this._collectAllInto(t),t}_collectAllInto(t){for(const e of this.objects)t.push(e);if(null!==this.children)for(const e of this.children)e._collectAllInto(t)}subdivide(){const{x:t,y:e,z:i,width:r,height:n}=this.bounds,o=r/2,s=n/2;this.children=[new _t({x:t,y:e,z:i,width:o,height:s},this.capacity),new _t({x:t+o,y:e,z:i,width:o,height:s},this.capacity),new _t({x:t,y:e+s,z:i,width:o,height:s},this.capacity),new _t({x:t+o,y:e+s,z:i,width:o,height:s},this.capacity)]}intersects(t,e){return!(t.x>=e.x+e.width||t.x+t.width<=e.x||t.y>=e.y+e.height||t.y+t.height<=e.y)}}class Ot{quadtree;_ydoc=null;_objectsMap=null;_metadataMap=null;_providers=[];_undoManager=null;_reviver=null;_core=null;_workspaceId=null;_isReady=!1;_temporaryItemsCount=0;_idMap=new Map;_awareness=null;_objectsObserver=null;_stackItemAddedHandler=null;_stackItemPoppedHandler=null;_awarenessChangeHandler=null;_awarenessChangeCallbacks=[];_objectsChangeCallbacks=[];_lastAwarenessEmitTime=0;_awarenessEmitTimeout=null;AWARENESS_THROTTLE_INTERVAL=100;_localOnlyMode=!1;get isReady(){return this._isReady}get awareness(){return this._awareness}get hasAwareness(){return!!this._awareness}get localClientId(){return this._awareness?.clientID??null}setLocalUser(t){if(!this._awareness||!t)return;const e=t.displayName||t.firstName||"Anonymous";this._awareness.setLocalStateField("user",{id:t.id,displayName:e,color:t.color||this.generateColorFromName(e)})}generateColorFromName(t){let e=0;for(let i=0;i<t.length;i++)e=t.charCodeAt(i)+((e<<5)-e);return`hsl(${Math.abs(e%360)}, 45%, 55%)`}updateCursorPosition(t,e){this._awareness&&this._awareness.setLocalStateField("cursor",{x:t,y:e})}clearCursorPosition(){this._awareness&&this._awareness.setLocalStateField("cursor",null)}setActiveDrawingObject(t){this._awareness&&this._awareness.setLocalStateField("activeObjectId",t)}setLocalSelectionBox(t){this._awareness&&this._awareness.setLocalStateField("selectionBox",t)}clearLocalSelectionBox(){this._awareness&&this._awareness.setLocalStateField("selectionBox",null)}removeOrphanedSelectionGroups(){if(!this._awareness)return;const t=this._awareness.getStates(),e=new Set;t.forEach((t=>{const i=t.user?.id;i&&e.add(i)}));const i=this._core?.user?.id,r=this.quadtree.filter((t=>t instanceof S&&null!=t.userId&&t.userId!==i&&!e.has(t.userId)));for(const t of r)this.quadtree.remove((e=>e.id===t.id)),this._idMap.delete(t.id),this._objectsMap&&this._ydoc.transact((()=>{this._objectsMap.delete(t.id)}),"local");r.length>0&&(this._core?.store.invalidateSelectionCache(),this._core?.rerender())}onAwarenessChange(t){this._awarenessChangeCallbacks.push(t)}onObjectsChange(t){this._objectsChangeCallbacks.push(t)}get undoManager(){return this._undoManager}get workspaceId(){return this._workspaceId}get undoState(){return{canUndo:!!this._undoManager&&this._undoManager.canUndo(),canRedo:!!this._undoManager&&this._undoManager.canRedo(),undoStackSize:this._undoManager?this._undoManager.undoStack.length:0,redoStackSize:this._undoManager?this._undoManager.redoStack.length:0}}get totalCount(){return this.quadtree.size}findById(t){return this._idMap.get(t)}constructor(){this.quadtree=new _t({x:-1/0,y:-1/0,z:0,width:1/0,height:1/0},8)}async initialize(t,e,i){this._core=t,this._workspaceId=e,this._reviver=new jt(t),this._ydoc=new Z.Doc,this._objectsMap=this._ydoc.getMap("objects"),this._metadataMap=this._ydoc.getMap("metadata");const r=t.editorId?`kritzel-workspace-${t.editorId}-${e}`:`kritzel-workspace-${e}`,n=i??kt,o=!t.store?.state?.debugInfo?.showSyncProviderInfo;for(const t of n.providers){let e;e="function"==typeof t?new t(r,this._ydoc,{quiet:o}):t.create(r,this._ydoc,{quiet:o}),this._providers.push(e)}this._undoManager=new Z.UndoManager([this._objectsMap],{captureTimeout:200,trackedOrigins:new Set(["local","temporary"]),ignoreRemoteMapChanges:!0}),this._stackItemAddedHandler=t=>{"undo"===t.type&&"temporary"===t.origin&&this._temporaryItemsCount++},this._stackItemPoppedHandler=t=>{"undo"===t.type&&"temporary"===t.origin&&this._temporaryItemsCount>0&&this._temporaryItemsCount--},this._undoManager.on("stack-item-added",this._stackItemAddedHandler),this._undoManager.on("stack-item-popped",this._stackItemPoppedHandler),this._objectsObserver=t=>{this.handleObjectsChange(t)},this._objectsMap.observe(this._objectsObserver);const s=this._providers.filter((t=>"local"===t.type)),a=this._providers.filter((t=>"network"===t.type));(await Promise.allSettled(s.map((t=>t.connect())))).forEach(((t,e)=>{"rejected"===t.status&&console.error(`[Kritzel] Sync provider "${s[e]?.constructor.name}" failed to connect:`,t.reason)}));for(const t of a)t.connect().catch((e=>{console.error(`[Kritzel] Network sync provider "${t.constructor.name}" failed to connect:`,e)}));this._isReady=!0;for(const t of a)if(t.awareness){this._awareness=t.awareness;break}this._awareness&&(this._awarenessChangeHandler=t=>{t.removed.length>0&&this.removeOrphanedSelectionGroups();const e=Date.now(),i=e-this._lastAwarenessEmitTime;if(null!==this._awarenessEmitTimeout&&(clearTimeout(this._awarenessEmitTimeout),this._awarenessEmitTimeout=null),i>=this.AWARENESS_THROTTLE_INTERVAL){this._lastAwarenessEmitTime=e;const t=this._awareness.getStates();for(const e of this._awarenessChangeCallbacks)e(t)}else this._awarenessEmitTimeout=setTimeout((()=>{this._lastAwarenessEmitTime=Date.now(),this._awarenessEmitTimeout=null;const t=this._awareness.getStates();for(const e of this._awarenessChangeCallbacks)e(t)}),this.AWARENESS_THROTTLE_INTERVAL-i)},this._awareness.on("change",this._awarenessChangeHandler)),this.initializeMetadata("workspace",e,t.store?.state?.activeWorkspace?.name??""),L(this._ydoc,this._metadataMap,{objects:this._objectsMap},W,R,{quiet:!t.store?.state?.debugInfo?.showMigrationInfo}),this.loadFromYjs()}handleObjectsChange(t){if("local"===t.transaction.origin||"temporary"===t.transaction.origin)return void this._core?.rerender();if("migration"===t.transaction.origin)return;const e=Array.from(t.keysChanged),i=[],r=[],n=[];e.forEach((e=>{const o=t.changes.keys.get(e);if(o&&"delete"===o.action)n.push(e);else{const t=this._objectsMap?.get(e);if(t){const e=this._reviver?.revive(t);e instanceof S?r.push(e):i.push(e)}}})),n.forEach((t=>{this.quadtree.remove((e=>e.id===t)),this._idMap.delete(t)}));const o=[],s=[];i.forEach((t=>{if(this._idMap.has(t.id)){const e=this._idMap.get(t.id);e&&"function"==typeof t.adoptTransientStateFrom&&t.adoptTransientStateFrom(e),this.quadtree.update(t),this._idMap.set(t.id,t),s.push(t)}else this.quadtree.insert(t),this._idMap.set(t.id,t),o.push(t)}));const a=new Set;if(r.forEach((t=>{if(this._idMap.has(t.id)){const e=this._idMap.get(t.id);e&&"function"==typeof t.adoptTransientStateFrom&&t.adoptTransientStateFrom(e),this.quadtree.update(t),this._idMap.set(t.id,t)}else this.quadtree.insert(t),this._idMap.set(t.id,t);a.add(t.id),t.invalidateObjectsCache(),t.refreshObjectDimensions(void 0,!0),t.captureUnchangedSnapshots(),this.quadtree.update(t)})),i.length>0||n.length>0){const t=new Set([...i.map((t=>t.id)),...n]),e=this.quadtree.filter((t=>t instanceof S&&!a.has(t.id)));for(const i of e)i.objectIds.some((e=>t.has(e)))&&(i.invalidateObjectsCache(),i.refreshObjectDimensions(void 0,!0),i.captureUnchangedSnapshots(),this.quadtree.update(i))}if(this._core?.store.invalidateSelectionCache(),this._core?.rerender(),o.length>0&&this._core?.engine.emitObjectsAdded(o),n.length>0){const t=n.map((t=>({id:t})));this._core?.engine.emitObjectsRemoved(t)}s.length>0&&this._core?.engine.emitObjectsUpdated(s.map((t=>({object:t,changedProperties:[]}))));for(const t of this._objectsChangeCallbacks)t()}initializeMetadata(t,e,i){this._metadataMap&&this._ydoc&&this._ydoc.transact((()=>{this._metadataMap?.get("type")||this._metadataMap?.set("type",t),void 0===this._metadataMap?.get("isPublic")&&this._metadataMap?.set("isPublic",!1),void 0===this._metadataMap?.get("schemaVersion")&&this._metadataMap?.set("schemaVersion",R),this._metadataMap?.set("workspaceId",e),this._metadataMap?.set("workspaceName",i)}),"metadata")}getIsPublic(){return this._metadataMap?.get("isPublic")??!1}setIsPublic(t){this._metadataMap&&this._ydoc&&this._ydoc?.transact((()=>{this._metadataMap?.set("isPublic",t)}),"metadata")}getDocumentType(){return this._metadataMap?.get("type")??"workspace"}getWorkspaceName(){return this._metadataMap?.get("workspaceName")??""}setWorkspaceName(t){this._metadataMap&&this._ydoc&&this._ydoc?.transact((()=>{this._metadataMap?.set("workspaceName",t)}),"metadata")}getMetadataWorkspaceId(){return this._metadataMap?.get("workspaceId")??""}transaction(t){this._ydoc&&this._ydoc.transact(t,"local")}withLocalUpdatesOnly(t){this._localOnlyMode=!0;try{t()}finally{this._localOnlyMode=!1}}loadFromYjs(){if(!this._objectsMap||!this._reviver)return;this.quadtree.reset(),this._idMap.clear();const t=this._core?.user?.id,e=[];this._objectsMap.forEach(((i,r)=>{const n=this._reviver?.revive(i);n instanceof S&&null!=n.userId&&n.userId!==t?e.push(r):n&&(this.quadtree.insert(n),this._idMap.set(n.id,n))})),e.length>0&&this._ydoc.transact((()=>{for(const t of e)this._objectsMap.delete(t)}),"local")}reset(){this.quadtree.reset(),this._idMap.clear(),this._ydoc?.transact((()=>{this._objectsMap?.clear()}),"local")}insert(t){if(!t.id)return!1;if(this.quadtree.insert(t),this._idMap.set(t.id,t),this._objectsMap&&this.isPersistable(t)){const e=t.serialize();this._ydoc?.transact((()=>{this._objectsMap?.set(t.id,e)}),"local")}return!0}update(t,e={}){if(!t.id)return!1;if(!this._idMap.has(t.id))return!1;if(this.quadtree.update(t),this._idMap.set(t.id,t),!this._localOnlyMode&&this._objectsMap&&this.isPersistable(t)){const i=t.serialize(),r=e.temporary?"temporary":"local";this._ydoc?.transact((()=>{this._objectsMap?.set(t.id,i)}),r)}return!0}remove(t){const e=this.quadtree.filter(t);for(const t of e)this.quadtree.remove((e=>e.id===t.id)),this._idMap.delete(t.id),this._objectsMap&&this.isPersistable(t)&&this._ydoc?.transact((()=>{this._objectsMap?.delete(t.id)}),"local")}filter(t){return this.quadtree.filter(t)}allObjects(){return this.quadtree.allObjects()}query(t){return this.quadtree.query(t)}isPersistable(t){return!(t instanceof I)}undo(){this._undoManager&&this._undoManager.canUndo()&&(this._undoManager.undo(),this._core?.engine.emitObjectsChange())}redo(){this._undoManager&&this._undoManager.canRedo()&&(this._undoManager.redo(),this._core?.engine.emitObjectsChange())}canUndo(){return!!this._undoManager&&this._undoManager.canUndo()}canRedo(){return!!this._undoManager&&this._undoManager.canRedo()}clearHistory(){this._undoManager&&(this._undoManager.clear(),this._temporaryItemsCount=0)}consolidateTemporaryItems(){if(!this._undoManager||0===this._temporaryItemsCount)return;const t=this._undoManager.undoStack.length;if(0===t)return void(this._temporaryItemsCount=0);this._undoManager.stopCapturing();const e=Math.min(this._temporaryItemsCount,t);if(e>1){for(let t=0;t<e;t++)this._undoManager.canUndo()&&this._undoManager.undo();this._ydoc?.transact((()=>{for(let t=e-1;t>=0;t--)this._undoManager?.canRedo()&&this._undoManager.redo()}),"local")}this._temporaryItemsCount=0}clearTemporaryItems(){if(!this._undoManager||0===this._temporaryItemsCount)return;const t=Math.min(this._temporaryItemsCount,this._undoManager.undoStack.length);for(let e=0;e<t;e++)this._undoManager.undoStack.length>0&&this._undoManager.undoStack.pop();this._temporaryItemsCount=0}destroy(){this._objectsMap&&this._objectsObserver&&(this._objectsMap.unobserve(this._objectsObserver),this._objectsObserver=null),this._undoManager&&(this._stackItemAddedHandler&&(this._undoManager.off("stack-item-added",this._stackItemAddedHandler),this._stackItemAddedHandler=null),this._stackItemPoppedHandler&&(this._undoManager.off("stack-item-popped",this._stackItemPoppedHandler),this._stackItemPoppedHandler=null),this._undoManager.destroy(),this._undoManager=null),this.quadtree.reset(),this._idMap.clear(),this._awareness&&this._awarenessChangeHandler&&(this._awareness.off("change",this._awarenessChangeHandler),this._awarenessChangeHandler=null),null!==this._awarenessEmitTimeout&&(clearTimeout(this._awarenessEmitTimeout),this._awarenessEmitTimeout=null),this._awareness=null,this._awarenessChangeCallbacks=[],this._providers.forEach((t=>{t.destroy()})),this._providers=[],this._objectsMap=null,this._metadataMap=null,this._ydoc&&(this._ydoc.destroy(),this._ydoc=null),this._core=null,this._reviver=null,this._workspaceId=null,this._isReady=!1,this._temporaryItemsCount=0}}class Et{_state;_listeners=new Map;_cachedSelectionBox=null;_cachedSelectionGroup=null;_selectionBoxCacheValid=!1;_selectionGroupCacheValid=!1;_localUserId=null;get state(){return this._state}get objects(){if(!this._state.objects)throw new Error("Objects map is not initialized.");return this._state.objects}get host(){if(!this._state.host)throw new Error("Host element is not set.");return this._state.host}get currentZIndex(){return Math.max(0,...this.objects.filter((t=>!(t instanceof S||t instanceof I))).map((t=>t.zIndex)))+1}get hasViewportBoundaries(){return Number.isFinite(this._state.viewportBoundaryLeft)||Number.isFinite(this._state.viewportBoundaryRight)||Number.isFinite(this._state.viewportBoundaryTop)||Number.isFinite(this._state.viewportBoundaryBottom)}get viewportBoundaryBounds(){const t=this._state.viewportBoundaryLeft,e=this._state.viewportBoundaryRight,i=this._state.viewportBoundaryTop,r=this._state.viewportBoundaryBottom;return{x:Number.isFinite(t)?t:-1/0,y:Number.isFinite(i)?i:-1/0,z:0,width:Number.isFinite(t)&&Number.isFinite(e)?e-t:1/0,height:Number.isFinite(i)&&Number.isFinite(r)?r-i:1/0}}get totalObjectCount(){return this.hasViewportBoundaries?this.allObjects.length:this.objects.totalCount}get allObjects(){return this.hasViewportBoundaries?this.objects.query(this.viewportBoundaryBounds):this.objects.allObjects()}get objectsInViewport(){return this.objects.query({x:-this._state.translateX/this._state.scale,y:-this._state.translateY/this._state.scale,z:this._state.scale,width:this._state.viewportWidth/this._state.scale,height:this._state.viewportHeight/this._state.scale,depth:100}).sort(((t,e)=>t.zIndex-e.zIndex))}get allNonSelectionObjects(){return this.allObjects.filter((t=>!(t instanceof S||t instanceof I)))}get selectedObjects(){return this.allObjects.filter((t=>!(t instanceof S))).filter((t=>t.isSelected))}get selectionBox(){if(this._selectionBoxCacheValid)return this._cachedSelectionBox;const t=this.objects.filter((t=>t instanceof I));return this._cachedSelectionBox=t.length>0?t[0]:null,this._selectionBoxCacheValid=!0,this._cachedSelectionBox}get selectionGroup(){if(this._selectionGroupCacheValid)return this._cachedSelectionGroup;const t=this.objects.filter((t=>t instanceof S));return this._cachedSelectionGroup=this._localUserId?t.find((t=>t.userId===this._localUserId))??null:t.length>0?t[0]:null,this._selectionGroupCacheValid=!0,this._cachedSelectionGroup}invalidateSelectionCache(){this._selectionBoxCacheValid=!1,this._selectionGroupCacheValid=!1}setSelectionBox(t){this._cachedSelectionBox=t,this._selectionBoxCacheValid=!0}setSelectionGroup(t){this._cachedSelectionGroup=t,this._selectionGroupCacheValid=!0}setLocalUserId(t){this._localUserId=t,this.invalidateSelectionCache()}get activeText(){const t=this.objects.filter((t=>t instanceof F&&t.isEditing));return t.length>0?t[0]:null}get activeShape(){const t=this.objects.filter((t=>t instanceof D&&t.isEditing));return t.length>0?t[0]:null}get currentPath(){const t=this.objects.filter((t=>t instanceof o&&!1===t.isCompleted));return t.length>0?t[0]:null}get currentLine(){const t=this.objects.filter((t=>t instanceof s&&!1===t.isCompleted));return t.length>0?t[0]:null}get offsetX(){return this.host.getBoundingClientRect().left}get offsetY(){return this.host.getBoundingClientRect().top}get isDisabled(){return!1===this._state.isEnabled||!1===this._state.isReady||null===this._state.activeWorkspace}get isPointerDown(){return this._state.pointers.size>0}constructor(t){this._state=t,this._state.objects=new Ot}onStateChange(t,e){this._listeners.has(t)||this._listeners.set(t,new Set);const i=this._listeners.get(t);if(!i)throw new Error(`Listeners set for property ${String(t)} was not initialized.`);i.add(e)}getState(t){return this._state[t]}setState(t,e){const i=this._state[t];if(i!==e){this._state[t]=e;const r=this._listeners.get(t);r&&r.forEach((r=>r(e,i,String(t))))}}}class Dt{map;_ydoc=null;_workspacesMap=null;_metadataMap=null;_providers=[];_core=null;_isReady=!1;_onRemoteChangeCallback=null;_workspacesObserver=null;get isReady(){return this._isReady}get hasNetworkSyncProvider(){return this._providers.some((t=>"network"===t.type))}constructor(){this.map=new Map}onRemoteChange(t){this._onRemoteChangeCallback=t}async initialize(t,e){this._core=t,this._ydoc=new Z.Doc,this._workspacesMap=this._ydoc.getMap("workspaces"),this._metadataMap=this._ydoc.getMap("metadata");const i=e?.appStateId??this.getOrCreateAppStateInstanceId(t),r=t.editorId?`kritzel-app-state-${t.editorId}-${i}`:`kritzel-app-state-${i}`,n=e??kt,o=!t.store.state.debugInfo.showSyncProviderInfo;for(const t of n.providers){let e;e="function"==typeof t?new t(r,this._ydoc,{quiet:o}):t.create(r,this._ydoc,{quiet:o}),this._providers.push(e)}this._workspacesObserver=t=>{this.handleWorkspacesChange(t)},this._workspacesMap.observe(this._workspacesObserver);const s=this._providers.filter((t=>"local"===t.type)),a=this._providers.filter((t=>"network"===t.type));(await Promise.allSettled(s.map((t=>t.connect())))).forEach(((t,e)=>{"rejected"===t.status&&console.error(`[Kritzel] Sync provider "${s[e]?.constructor.name}" failed to connect:`,t.reason)}));for(const t of a)t.connect().catch((e=>{console.error(`[Kritzel] Network sync provider "${t.constructor.name}" failed to connect:`,e)}));this._isReady=!0,L(this._ydoc,this._metadataMap,{workspaces:this._workspacesMap},B,P,{quiet:!t.store.state.debugInfo.showMigrationInfo}),this.initializeMetadata("state"),this.loadFromYjs()}getOrCreateAppStateInstanceId(t){const e=globalThis.localStorage;if(!e)throw new Error("[KritzelAppStateMap] localStorage is unavailable. Cannot persist app-state document identity.");const i=t.getStorageKey("kritzel-app-state-instance-id");let r;try{r=e.getItem(i)}catch{throw new Error("[KritzelAppStateMap] Failed to read app-state instance id from localStorage.")}if(r)return r;const n=V.generateUUID();try{e.setItem(i,n)}catch{throw new Error("[KritzelAppStateMap] Failed to persist app-state instance id to localStorage.")}return n}handleWorkspacesChange(t){if("local"===t.transaction.origin)return void this._core?.rerender();if("migration"===t.transaction.origin)return;const e=Array.from(t.keysChanged),i=[],r=[];e.forEach((e=>{const n=t.changes.keys.get(e);if(n&&"delete"===n.action)r.push(e);else{const t=this._workspacesMap.get(e);if(t){const e=this.reviveWorkspace(t);i.push(e)}}})),r.forEach((t=>{this.map.delete(t)})),i.forEach((t=>{this.map.set(t.id,t)})),this._core?.store&&(this._core.store.state.workspaces=this.allWorkspaces()),this._onRemoteChangeCallback&&this._onRemoteChangeCallback(),this._core?.rerender()}reviveWorkspace(t){let e=t.viewport;if(e&&"translateX"in e&&!("centerWorldX"in e)){const t=e.scale??1;e={centerWorldX:-(e.translateX??0)/t,centerWorldY:-(e.translateY??0)/t,scale:t}}const i=new _(t.id,t.name,e);return this._core&&(i._core=this._core),i.createdAt=new Date(t.createdAt),i.updatedAt=new Date(t.updatedAt),i.isPublic=t.isPublic??!1,i}initializeMetadata(t){this._metadataMap&&this._ydoc&&this._ydoc.transact((()=>{this._metadataMap?.get("type")||this._metadataMap?.set("type",t),void 0===this._metadataMap?.get("isPublic")&&this._metadataMap?.set("isPublic",!1),void 0===this._metadataMap?.get("schemaVersion")&&this._metadataMap?.set("schemaVersion",P)}),"metadata")}getIsPublic(){return this._metadataMap?.get("isPublic")??!1}setIsPublic(t){this._metadataMap&&this._ydoc&&this._ydoc.transact((()=>{this._metadataMap?.set("isPublic",t)}),"metadata")}getDocumentType(){return this._metadataMap?.get("type")??"state"}transaction(t){this._ydoc&&this._ydoc.transact(t,"local")}loadFromYjs(){this._workspacesMap&&(this.map.clear(),this._workspacesMap.forEach(((t,e)=>{const i=this.reviveWorkspace(t);this.map.set(e,i)})))}reset(){this.map.clear(),this._ydoc?.transact((()=>{this._workspacesMap?.clear()}),"local")}insert(t){if(!t.id)return!1;if(this.map.set(t.id,t),this._workspacesMap){const e=t.serialize();this._ydoc?.transact((()=>{this._workspacesMap?.set(t.id,e)}),"local")}return!0}update(t){if(!t.id||!this.map.has(t.id))return!1;if(this.map.set(t.id,t),this._workspacesMap){const e=t.serialize();this._ydoc?.transact((()=>{this._workspacesMap?.set(t.id,e)}),"local")}return!0}remove(t){const e=Array.from(this.map.values()).find(t);return!!e&&(this.map.delete(e.id),this._workspacesMap&&this._ydoc?.transact((()=>{this._workspacesMap?.delete(e.id)}),"local"),!0)}get(t){return this.map.get(t)}allWorkspaces(){return Array.from(this.map.values())}filter(t){return Array.from(this.map.values()).filter(t)}find(t){return Array.from(this.map.values()).find(t)}has(t){return this.map.has(t)}destroy(){this._workspacesMap&&this._workspacesObserver&&(this._workspacesMap.unobserve(this._workspacesObserver),this._workspacesObserver=null),this._providers.forEach((t=>{t.disconnect(),t.destroy()})),this._providers=[],this.map.clear(),this._workspacesMap=null,this._metadataMap=null,this._ydoc&&(this._ydoc.destroy(),this._ydoc=null),this._core=null,this._onRemoteChangeCallback=null,this._isReady=!1}}class Ft{_core;_targetElement=null;_shadowRoot=null;constructor(t){this._core=t}setTargetElement(t){this._targetElement&&(this._targetElement.style.cursor="",this._targetElement.style.removeProperty("--kritzel-global-pointer-cursor")),this._targetElement=t,this._targetElement&&this._targetElement.style.setProperty("--kritzel-global-pointer-cursor",U.getPointerCursor())}getTargetElement(){return this._targetElement}setShadowRoot(t){this._shadowRoot=t}resetToDefault(){this._core.store.state.cursor={icon:"default",iconActive:"default"}}updateHoverState(t){if(this._core.store.isPointerDown)return;if(!this._shadowRoot)return;const e=this._shadowRoot.elementsFromPoint(t.clientX,t.clientY);if(!e||0===e.length)return;const i=e.find((t=>t.classList.contains("resize-handle-overlay")));if(i){const t=this._core.store.selectionGroup,e=t?.rotationDegrees??0,r=i.classList.contains("top-left"),n=i.classList.contains("bottom-right");this._core.store.state.cursor={icon:"move-vertical",rotation:e+(r||n?-45:45)}}else this._core.store.state.cursor=e.find((t=>t.classList.contains("rotation-handle-overlay")))||e.find((t=>t.classList.contains("selection-line-handle-overlay")))?{icon:"hand",iconActive:"hand-grab"}:{icon:"default",iconActive:"default"}}applyCursor(){const t=this._core.store.state,e=this._core.store.isPointerDown,i=t.cursor?.icon,r=t.cursor?.iconActive??i,n=t.cursor?.rotation,o=U.getCursor({iconName:e?r:i,rotation:n});this._targetElement&&(this._targetElement.style.cursor=o)}cleanup(){this._targetElement&&(this._targetElement.style.cursor="",this._targetElement.style.removeProperty("--kritzel-pointer-cursor")),this._targetElement=null,this._shadowRoot=null}}class Lt{_kritzelEngine;_store;_syncConfig;_assetStorageConfig;_assetResolver;_appStateMap;_anchorManager;_cursorManager;_themeManager;_editorId;_user;get engine(){return this._kritzelEngine}get store(){return this._store}get appStateMap(){return this._appStateMap}get anchorManager(){return this._anchorManager}get cursorManager(){return this._cursorManager}get themeManager(){return this._themeManager}get editorId(){return this._editorId}getStorageKey(t){return this._editorId?`${t}-${this._editorId}`:t}get user(){return this._user}setUser(t){this._user=t,this._store.setLocalUserId(t?.id??null),this._store.objects?.setLocalUser(t)}constructor(t,e){this._kritzelEngine=t,this._editorId=e,this._store=new Et(Tt),this._appStateMap=new Dt,this._anchorManager=new N(this),this._cursorManager=new Ft(this),this._themeManager=new K(this),this._assetResolver=new H}get assetResolver(){return this._assetResolver}setSyncConfig(t){this._syncConfig=t}setAssetStorageConfig(t){this._assetStorageConfig=t}setEditorId(t){this._editorId=t,this._themeManager=new K(this)}async initializeYjs(){await this._appStateMap.initialize(this,this._syncConfig)}async initializeAssetStorage(){await this._assetResolver.init(this._assetStorageConfig),this.warnIfAssetStorageMismatched()}warnIfAssetStorageMismatched(){this._appStateMap.hasNetworkSyncProvider&&(this._assetResolver.hasRemoteProvider||console.warn("[Kritzel] A network sync provider is configured, but no remote asset storage provider was found. Images added on this device will only be available locally and will appear broken on other devices. Configure a remote asset provider (e.g. HttpAssetProvider) via the `assetStorage` prop to enable cross-device image sync."))}loadWorkspacesFromAppState(){return this._appStateMap.allWorkspaces()}saveWorkspaceToAppState(t){this._appStateMap.has(t.id)?this._appStateMap.update(t):this._appStateMap.insert(t)}deleteWorkspaceFromAppState(t){this._appStateMap.remove((e=>e.id===t))}async initializeWorkspace(t,e){const i=this.loadWorkspacesFromAppState(),r=i.length>0?[...i].sort(((t,e)=>{const i=e.createdAt.getTime()-t.createdAt.getTime();return 0!==i?i:e.updatedAt.getTime()-t.updatedAt.getTime()}))[0]:null,n=localStorage.getItem(this.getStorageKey("kritzel-active-workspace-id")),o=n?i.find((t=>t.id===n)):null;let s;if(t)s=t,i.find((e=>e.id===t.id))||(s._core=this,this.saveWorkspaceToAppState(s));else if(o)s=o;else if(r)s=r;else{if(e?.skipFallbackCreation)return this._store.state.workspaces=i,this._store.state.activeWorkspace=null,void this.rerender();s=new _(V.generateUUID(),"New Workspace"),s._core=this,this.saveWorkspaceToAppState(s)}localStorage.setItem(this.getStorageKey("kritzel-active-workspace-id"),s.id),this._store.objects&&this._store.objects.isReady&&this._store.objects.destroy();const a=new Ot;this._store.state.objects=a,this._store.state.activeWorkspace=s,this._store.state.workspaces=this.loadWorkspacesFromAppState();const l=s.viewport??{centerWorldX:0,centerWorldY:0,scale:1},c=l.scale??1,h=this._store.state.viewportHeight;this._store.state.translateX=this._store.state.viewportWidth/2-(l.centerWorldX??0)*c,this._store.state.translateY=h/2-(l.centerWorldY??0)*c,this._store.state.scale=c,await a.initialize(this,s.id,this._syncConfig),this._user&&a.setLocalUser(this._user),a.onAwarenessChange((t=>{this.engine.emitAwarenessChange(t)})),this._anchorManager.rebuildIndex(),this.engine.emitObjectsChange(),this.rerender()}async loadSharedWorkspace(t){const e=t;let i=this.getWorkspaces().find((t=>t.id===e));i?i.isPublic=!0:(i=new _(e,"Shared Workspace"),i.isPublic=!0,this.createWorkspace(i)),await this.initializeWorkspace(i)}getObjectsInViewport(){return this._store.objects?this._store.objects.query({x:-this._store.state.translateX/this._store.state.scale,y:-this._store.state.translateY/this._store.state.scale,z:this._store.state.scale,width:this._store.state.viewportWidth/this._store.state.scale,height:this._store.state.viewportHeight/this._store.state.scale,depth:100}).filter((t=>!(t instanceof S||t instanceof I))).sort(((t,e)=>t.zIndex-e.zIndex)):[]}rerender(){this._kritzelEngine&&this._kritzelEngine.forceUpdate++}findObjectById(t){for(const e of this._store.allObjects)if(e.id===t)return e;return null}getWorkspaces(){return this.loadWorkspacesFromAppState()}createWorkspace(t){t._core=this,t.createdAt=new Date,t.updatedAt=new Date,this.saveWorkspaceToAppState(t),this._store.state.workspaces=this.loadWorkspacesFromAppState()}updateWorkspace(t){t.updatedAt=new Date,this.saveWorkspaceToAppState(t),this._store.state.activeWorkspace?.id===t.id&&this._store.objects?.setWorkspaceName(t.name);const e=this._store.state.workspaces,i=e.findIndex((e=>e.id===t.id));-1!==i&&(e[i]=t,this._store.state.workspaces=e)}deleteWorkspace(t){this._store.state.activeWorkspace?.id===t.id&&(this.engine.viewport?.cancelPendingUpdates(),this._store.objects?.destroy()),this.deleteWorkspaceFromAppState(t.id),this._store.state.workspaces=this.loadWorkspacesFromAppState(),window.indexedDB.deleteDatabase(this._editorId?`kritzel-workspace-${this._editorId}-${t.id}`:`kritzel-workspace-${t.id}`)}updateWorkspaceViewport(t,e,i){const r=this._store.state.activeWorkspace;r&&this._store.state.workspaces.some((t=>t.id===r.id))&&(r.viewport={centerWorldX:(this._store.state.viewportWidth/2-t)/i,centerWorldY:(this._store.state.viewportHeight/2-e)/i,scale:i},r.updatedAt=new Date,this.saveWorkspaceToAppState(r))}getIsPublic(){return this._store.state.activeWorkspace?.isPublic??!1}addObject(t){this._store.objects.insert(t)}removeObject(t,e=!1){G.isInstanceOf(t,"KritzelGroup")&&!e&&[...t.children].forEach((t=>{this.removeObject(t)})),G.isInstanceOf(t,"KritzelLine")?this._anchorManager.handleLineDeleted(t.id):this._anchorManager.handleObjectDeleted(t.id),t.isMounted=!1,this._store.objects.remove((e=>e.id===t.id))}updateObject(t,e){const i=[];for(const r in e)if(e.hasOwnProperty(r)){const n=e[r];void 0!==n&&(t[r]=n,i.push(r))}t.onAfterUpdate(i),this._store.objects.update(t)}addSelectionGroup(t){this.removeSelectionGroup(),this.removeSelectionBox(),this._store.objects.insert(t),this._store.setSelectionGroup(t),this._kritzelEngine.triggerSelectionChange()}removeSelectionGroup(){const t=this._store.selectionGroup;t&&(this._store.objects.remove((e=>e.id===t.id)),this._store.setSelectionGroup(null),this._kritzelEngine.triggerSelectionChange())}removeSelectionBox(){const t=this._store.selectionBox;t&&(this._store.objects.remove((e=>e.id===t.id)),this._store.setSelectionBox(null),this._store.objects.clearLocalSelectionBox())}deselectAllObjects(){this.removeSelectionGroup(),this.rerender()}delete(){const t=this._store.selectionGroup;t&&(t.objects.forEach((t=>this.removeObject(t))),this.removeSelectionGroup(),this.engine.emitObjectsInViewportChange(),this.rerender())}undo(){this._store.objects?.undo()}redo(){this._store.objects?.redo()}deleteObject(t){const e=this.findObjectById(t);e&&(this.removeObject(e),this.engine.emitObjectsInViewportChange(),this.rerender())}copy(){const t=this._store.selectionGroup;if(t){const e=new Map,i=t.objects.sort(((t,e)=>t.zIndex-e.zIndex)).map((t=>{const i=t.copy();return e.set(i.id,t.id),i}));this._store.state.copiedObjects=i,this._store.state.copiedObjectIdMapping=e}}cut(){this._store.selectionGroup&&(this.copy(),this.delete())}paste(t,e){const i=this._store.state.copiedObjects;if(!i||0===i.length)return;const r=this._store.state.activeWorkspace,n=this._store.state.copiedObjectIdMapping,o=i.some((t=>t.workspaceId!==r.id)),s=Math.min(...i.map((t=>t.translateX))),a=Math.min(...i.map((t=>t.translateY)));let l,c;void 0!==t&&void 0!==e?(l=t,c=e):o?(l=s,c=a):(l=s+25/this._store.state.scale,c=a+25/this._store.state.scale);const h=l-s,u=c-a;this.removeSelectionGroup(),this.removeSelectionBox();const d=S.create(this),f=new Map;n&&n.forEach(((t,e)=>{f.set(t,e)}));const p=this._store.currentZIndex;this._store.objects.transaction((()=>{i.forEach(((t,e)=>{t.workspaceId!==r.id&&(t.workspaceId=r.id),t.updatePosition(t.translateX+h,t.translateY+u),t.zIndex=p+e,G.isInstanceOf(t,"KritzelGroup")&&t._pendingChildren.length>0&&(t._pendingChildren.forEach(((t,i)=>{t.workspaceId!==r.id&&(t.workspaceId=r.id),t.updatePosition(t.translateX+h,t.translateY+u),t.zIndex=p+e+i,this.addObject(t)})),t._pendingChildren=[],t.finalize()),this.addObject(t),d.addOrRemove(t)})),i.forEach((t=>{if(G.isInstanceOf(t,"KritzelLine")){let e=!1;t.startAnchor&&f.has(t.startAnchor.objectId)&&(t.startAnchor={objectId:f.get(t.startAnchor.objectId)},e=!0),t.endAnchor&&f.has(t.endAnchor.objectId)&&(t.endAnchor={objectId:f.get(t.endAnchor.objectId)},e=!0),e&&this._store.objects.update(t)}}))})),this._anchorManager.rebuildIndex(),d.isSelected=!0,1===i.length&&(d.rotation=i[0].rotation),this.addSelectionGroup(d),o&&(void 0!==t&&void 0!==e?d.updatePosition(t,e):d.centerInViewport(),this.engine.viewport.centerFitInViewport(d)),this._store.state.isSelecting=!1,requestAnimationFrame((()=>{const t=this._store.selectionGroup;if(t){const e=new Map,i=t.objects.sort(((t,e)=>t.zIndex-e.zIndex)).map((t=>{const i=t.copy();return e.set(i.id,t.id),i}));this._store.state.copiedObjects=i,this._store.state.copiedObjectIdMapping=e}})),this._store.setState("activeTool",T.getTool("selection")),this.engine.emitObjectsChange(),this.rerender()}bringForward(t){const e=this._store.selectionGroup,i=t?[t]:e?.objects||[],r=this._store.allNonSelectionObjects.filter((t=>-1===i.findIndex((e=>e.id===t.id)))),n=r.length>0?Math.max(...r.map((t=>t.zIndex)))+1:0;i.forEach((t=>{t.zIndex!==n&&this.updateObject(t,{zIndex:t.zIndex+1})})),this.rerender()}sendBackward(t){const e=this._store.selectionGroup,i=t?[t]:e?.objects||[],r=this._store.allNonSelectionObjects.filter((t=>-1===i.findIndex((e=>e.id===t.id)))),n=r.length>0?Math.min(...r.map((t=>t.zIndex)))-1:0;i.forEach((t=>{t.zIndex!==n&&this.updateObject(t,{zIndex:t.zIndex-1})})),this.rerender()}bringToFront(t){const e=this._store.selectionGroup,i=t?[t]:e?.objects||[],r=this._store.allNonSelectionObjects.filter((t=>-1===i.findIndex((e=>e.id===t.id)))),n=Math.max(...r.map((t=>t.zIndex)))+1;i.forEach((t=>{this.updateObject(t,{zIndex:n})})),this.rerender()}sendToBack(t){const e=this._store.selectionGroup,i=t?[t]:e?.objects||[],r=this._store.allNonSelectionObjects.filter((t=>-1===i.findIndex((e=>e.id===t.id)))),n=Math.min(...r.map((t=>t.zIndex)))-1;i.forEach((t=>{this.updateObject(t,{zIndex:n})})),this.rerender()}alignObjects(t){const e=this._store.selectionGroup;if(!e||e.objects.length<2)return;const i=e.objects,r=At.calculateAlignedPositions(i,t);this._store.objects.transaction((()=>{for(const t of i){const e=r.get(t.id);e&&this.updateObject(t,{translateX:e.translateX,translateY:e.translateY})}})),e.refreshObjectDimensions(),this.rerender()}group(){const t=this._store.selectionGroup;if(!t||t.objects.length<2)return;const e=O.createFromObjects(this,t.objects);this.addObject(e),this.removeSelectionGroup();const i=S.create(this);i.addOrRemove(e),i.isSelected=!0,i.rotation=e.rotation,this.addSelectionGroup(i),this.engine.emitObjectsChange(),this.rerender()}ungroup(){const t=this._store.selectionGroup;if(!t)return;const e=t.objects.filter((t=>G.isInstanceOf(t,"KritzelGroup")));if(0===e.length)return;const i=[],r=t.objects.filter((t=>!G.isInstanceOf(t,"KritzelGroup")));e.forEach((t=>{const e=t.ungroup();i.push(...e),this.removeObject(t,!0)})),this.removeSelectionGroup();const n=S.create(this);[...i,...r].forEach((t=>{n.addOrRemove(t)})),n.isSelected=!0,this.addSelectionGroup(n),this.engine.emitObjectsChange(),this.rerender()}selectObjects(t){if(0===t.length)return;const e=S.create(this);t.forEach((t=>{t.isSelected=!1,e.addOrRemove(t)})),e.isSelected=!0,1===t.length&&(e.rotation=e.objects[0].rotation),this.addSelectionGroup(e),this.rerender()}selectAllObjects(){const t=this._store.objects.allObjects().filter((t=>!(t instanceof S||t instanceof I||t instanceof st)));if(t.length>0){const e=S.create(this);t.forEach((t=>{t.isSelected=!1,e.addOrRemove(t)})),e.isSelected=!0,this._store.state.isSelecting=!1,1===t.length&&(e.rotation=e.objects[0].rotation),this.addSelectionGroup(e),this._store.setState("activeTool",T.getTool("selection")),this.rerender()}}selectAllObjectsInViewport(){const t=this._store.objects.query({x:-this._store.state.translateX/this._store.state.scale,y:-this._store.state.translateY/this._store.state.scale,z:this._store.state.scale,width:this._store.state.viewportWidth/this._store.state.scale,height:this._store.state.viewportHeight/this._store.state.scale,depth:100}).filter((t=>t.isInViewport())).filter((t=>!(t instanceof S||t instanceof I||t instanceof st)));if(t.length>0){const e=S.create(this);t.forEach((t=>{t.isSelected=!1,e.addOrRemove(t)})),e.isSelected=!0,this._store.state.isSelecting=!1,1===t.length&&(e.rotation=e.objects[0].rotation),this.addSelectionGroup(e),this._store.setState("activeTool",T.getTool("selection")),this.rerender()}}clearSelection(){this.removeSelectionGroup();const t=this._user?.id;this._store.objects.remove((e=>e instanceof I||e instanceof S&&(null==t||e.userId===t||null==e.userId))),this._store.setSelectionBox(null),this._store.setSelectionGroup(null),this._store.state.isSelecting=!1,this._store.state.isResizeHandleSelected=!1,this._store.state.isRotationHandleSelected=!1,this._store.state.isLineHandleSelected=!1,this._store.state.isLineHandleDragging=!1,this._store.state.lineHandleType=void 0,this.rerender()}resetActiveText(){const t=this._store.activeText;t&&(t.isEmpty?this.deleteObject(t.id):t.save())}resetActiveShape(){const t=this._store.activeShape;t&&t.save()}getObjectFromPointerEvent(t,e=".object"){const i=this._store.state.host?.shadowRoot;if(!i)return null;const r=t.clientX,n=t.clientY,o=i.elementFromPoint(r,n);if(!o)return null;const s=o.closest(e);if(s){const t=this._store.allObjects.find((t=>s.id===t.id));return t&&t.hitTest(r,n)?t:null}return null}getObjectsFromPointerEvent(t,e=".object"){const i=this._store.state.host?.shadowRoot;if(!i)return[];const r=i.elementsFromPoint(t.clientX,t.clientY);if(!r||0===r.length)return[];const n=new Set;return r.forEach((t=>{const i=t.closest(e);i&&i.id&&n.add(i.id)})),n.size>0?this._store.allObjects.filter((t=>n.has(t.id))).sort(((t,e)=>e.zIndex-t.zIndex)):[]}getElementsAtPoint(t,e){const i=this._store.state.host?.shadowRoot;if(!i)return[];const r=i.elementsFromPoint(t.clientX,t.clientY);return r&&0!==r.length?r.filter((t=>t.matches(e))):[]}isPointerOverElement(t,e){return this.getElementsAtPoint(t,e).length>0}getCanvasPoint(t){if(!this._store.state.host)return{x:0,y:0};const e=this._store.state.host.getBoundingClientRect();return{x:(t.clientX-e.left-this._store.state.translateX)/this._store.state.scale,y:(t.clientY-e.top-this._store.state.translateY)/this._store.state.scale}}beforeWorkspaceChange(){this._kritzelEngine.viewport?.cancelPendingUpdates(),this._store.state.activeWorkspace&&this.updateWorkspaceViewport(this._store.state.translateX,this._store.state.translateY,this._store.state.scale),this.resetActiveText(),this.clearSelection(),this._store.setState("activeTool",T.getTool("selection"))}displaySelectionGroupUI(t){if(!t.isSelected)return!1;if(t instanceof S&&null!=this._user?.id&&null!=t.userId&&t.userId!==this._user.id)return!0;const e=this._store.selectionGroup;return e?e.objects.length>1||(1!==e.objects.length||!(e.objects[0]instanceof s)):!(t instanceof s)}displaySelectionLineUI(t){if(!(t instanceof s))return!1;const e=this._store.selectionGroup;if(!e)return t.isSelected;if(!e.isSelected)return!1;if(1===e.objects.length){const i=e.objects[0];return i instanceof s&&i.id===t.id}return!1}}class Rt{static calculateCombinedBounds(t){if(!t||0===t.length)return null;let e=1/0,i=1/0,r=-1/0,n=-1/0;for(const o of t){const t=o.rotatedBoundingBox;e=Math.min(e,t.x),i=Math.min(i,t.y),r=Math.max(r,t.x+t.width),n=Math.max(n,t.y+t.height)}return{x:e,y:i,z:1,width:r-e,height:n-i}}static generateSvg(t,e={}){const{theme:i,padding:r=0,includeXmlDeclaration:n=!0}=e;if(!t||0===t.length)return"";const o=this.flattenObjects(t),s=this.calculateCombinedBounds(o);if(!s)return"";const a=s.x-r,l=s.y-r,c=s.width+2*r,h=s.height+2*r,u=this.collectDefs(o,i),d=t.sort(((t,e)=>t.zIndex-e.zIndex)).map((t=>this.objectToSvgElement(t,i))).filter(Boolean).join("\n ");return`${n?'<?xml version="1.0" encoding="UTF-8"?>\n':""}<svg xmlns="http://www.w3.org/2000/svg" viewBox="${a} ${l} ${c} ${h}" width="${c}" height="${h}">${u.length>0?`\n <defs>\n ${u.join("\n ")}\n </defs>`:""}\n ${d}\n</svg>`}static flattenObjects(t){const e=[];for(const i of t)G.isInstanceOf(i,"KritzelGroup")?e.push(...this.flattenObjects(i.children)):e.push(i);return e}static collectDefs(t,e){const i=[];for(const r of t)G.isInstanceOf(r,"KritzelLine")&&(r.hasStartArrow&&i.push(this.generateArrowMarker(r,"start",e)),r.hasEndArrow&&i.push(this.generateArrowMarker(r,"end",e)));return i}static generateArrowMarker(t,e,i){const r="start"===e?t.startMarkerId:t.endMarkerId,n=t.getArrowSize(e),o=t.getArrowFill(e);return`<marker id="${r}" markerWidth="${n}" markerHeight="${n}" refX="0" refY="${n/2}" orient="${"start"===e?"auto-start-reverse":"auto"}" markerUnits="userSpaceOnUse">\n <path d="${t.getArrowPath("start"===e?t.arrows?.start?.style:t.arrows?.end?.style)}" fill="${o}" transform="scale(${n/10})"/>\n </marker>`}static objectToSvgElement(t,e){return G.isInstanceOf(t,"KritzelPath")?this.pathToSvg(t,e):G.isInstanceOf(t,"KritzelLine")?this.lineToSvg(t,e):G.isInstanceOf(t,"KritzelShape")?this.shapeToSvg(t,e):G.isInstanceOf(t,"KritzelText")?this.textToSvg(t,e):G.isInstanceOf(t,"KritzelImage")?this.imageToSvg(t):G.isInstanceOf(t,"KritzelGroup")?this.groupToSvg(t,e):""}static pathToSvg(t,e){const i=this.buildTransform(t),r=a.resolveThemeColor(t.fill,e),n=a.resolveThemeColor(t.stroke,e);return`<g transform="${i}"${1!==t.opacity?` opacity="${t.opacity}"`:""}>\n <svg viewBox="${t.viewBox}" width="${t.totalWidth/t.scale}" height="${t.totalHeight/t.scale}" overflow="visible">\n <path d="${t.d}" fill="${r||"none"}" stroke="${n||"none"}"${t.strokeWidth?` stroke-width="${t.strokeWidth}"`:""}/>\n </svg>\n </g>`}static lineToSvg(t,e){const i=this.buildTransform(t),r=a.resolveThemeColor(t.stroke,e);return`<g transform="${i}"${1!==t.opacity?` opacity="${t.opacity}"`:""}>\n <svg viewBox="${t.viewBox}" width="${t.totalWidth/t.scale}" height="${t.totalHeight/t.scale}" overflow="visible">\n <path d="${t.d}" fill="none" stroke="${r}" stroke-width="${t.strokeWidth}" stroke-linecap="round"${t.hasStartArrow?` marker-start="url(#${t.startMarkerId})"`:""}${t.hasEndArrow?` marker-end="url(#${t.endMarkerId})"`:""}/>\n </svg>\n </g>`}static shapeToSvg(t,e){const i=this.buildTransform(t),r=a.resolveThemeColor(t.fillColor,e),n=a.resolveThemeColor(t.strokeColor,e),o=1!==t.opacity?` opacity="${t.opacity}"`:"",s=t.getSvgPath();let l="";if(t.editor&&!t.editor.state.doc.textContent.trim());else if(t.content){const i=this.prosemirrorToHtml(t.content,t,e);if(i){const r=a.resolveThemeColor(t.fontColor,e);l=`\n <foreignObject x="${t.x}" y="${t.y}" width="${t.width}" height="${t.height}">\n <div xmlns="http://www.w3.org/1999/xhtml" style="width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; text-align: center; font-family: ${t.fontFamily}; font-size: ${t.fontSize}px; color: ${r}; overflow: hidden;">\n ${i}\n </div>\n </foreignObject>`}}return`<g transform="${i}"${o}>\n <svg viewBox="${t.viewBox}" width="${t.totalWidth/t.scale}" height="${t.totalHeight/t.scale}" overflow="visible" preserveAspectRatio="none">\n <path d="${s}" fill="${r||"transparent"}" stroke="${n}" stroke-width="${t.strokeWidth}"/>${l}\n </svg>\n </g>`}static textToSvg(t,e){const i=this.buildTransform(t),r=1!==t.opacity?` opacity="${t.opacity}"`:"",n=a.resolveThemeColor(t.fontColor,e),o=a.resolveThemeColor(t.backgroundColor,e),s=this.prosemirrorToHtml(t.content,t,e);return`<g transform="${i}"${r}>\n <foreignObject x="0" y="0" width="${t.totalWidth/t.scale}" height="${t.totalHeight/t.scale}">\n <div xmlns="http://www.w3.org/1999/xhtml" style="font-family: ${t.fontFamily}; font-size: ${t.fontSize}pt; color: ${n}; background-color: ${o||"transparent"}; transform: scale(${t.scaleFactor}); transform-origin: top left; white-space: pre-wrap; word-wrap: break-word;">\n ${s}\n </div>\n </foreignObject>\n </g>`}static imageToSvg(t){return`<g transform="${this.buildTransform(t)}"${1!==t.opacity?` opacity="${t.opacity}"`:""}>\n <image href="${t.resolvedSrc||t.src||""}" x="0" y="0" width="${t.totalWidth/t.scale}" height="${t.totalHeight/t.scale}" preserveAspectRatio="xMidYMid meet"/>\n </g>`}static groupToSvg(t,e){const i=t.children.sort(((t,e)=>t.zIndex-e.zIndex)).map((t=>this.objectToSvgElement(t,e))).filter(Boolean).join("\n ");return i?`<g${1!==t.opacity?` opacity="${t.opacity}"`:""}>\n ${i}\n </g>`:""}static buildTransform(t){const e=[];if(e.push(`translate(${t.translateX}, ${t.translateY})`),0!==t.rotation){const i=t.rotation*(180/Math.PI);e.push(`rotate(${i}, ${t.totalWidth/2/t.scale}, ${t.totalHeight/2/t.scale})`)}return e.join(" ")}static prosemirrorToHtml(t,e,i){return t&&t.content?t.content.map((t=>this.nodeToHtml(t,i))).join(""):""}static nodeToHtml(t,e){if(!t)return"";switch(t.type){case"paragraph":return`<p style="margin: 0;">${(t.content?t.content.map((t=>this.nodeToHtml(t,e))).join(""):"")||"<br/>"}</p>`;case"text":let i=this.escapeHtml(t.text||"");if(t.marks)for(const r of t.marks)i=this.applyMark(i,r,e);return i;case"hard_break":return"<br/>";case"bullet_list":return`<ul style="margin: 0; padding-left: 1.5em;">${t.content?t.content.map((t=>this.nodeToHtml(t,e))).join(""):""}</ul>`;case"ordered_list":return`<ol style="margin: 0; padding-left: 1.5em;">${t.content?t.content.map((t=>this.nodeToHtml(t,e))).join(""):""}</ol>`;case"list_item":return`<li>${t.content?t.content.map((t=>this.nodeToHtml(t,e))).join(""):""}</li>`;default:return t.content?t.content.map((t=>this.nodeToHtml(t,e))).join(""):""}}static applyMark(t,e,i){switch(e.type){case"bold":case"strong":return`<strong>${t}</strong>`;case"italic":case"em":return`<em>${t}</em>`;case"underline":return`<u>${t}</u>`;case"strike":return`<s>${t}</s>`;case"code":return`<code>${t}</code>`;case"link":return`<a href="${this.escapeHtml(e.attrs?.href||"#")}">${t}</a>`;default:return t}}static escapeHtml(t){return t.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}}const Wt=(()=>{let t=0;return()=>(t+=1,`u${`0000${(Math.random()*36**4|0).toString(36)}`.slice(-4)}${t}`)})();function Pt(t){const e=[];for(let i=0,r=t.length;i<r;i++)e.push(t[i]);return e}let Bt=null;function Vt(t={}){return Bt||(t.includeStyleProperties?(Bt=t.includeStyleProperties,Bt):(Bt=Pt(window.getComputedStyle(document.documentElement)),Bt))}function Ut(t,e){const i=(t.ownerDocument.defaultView||window).getComputedStyle(t).getPropertyValue(e);return i?parseFloat(i.replace("px","")):0}function Nt(t,e={}){return{width:e.width||function(t){const e=Ut(t,"border-left-width"),i=Ut(t,"border-right-width");return t.clientWidth+e+i}(t),height:e.height||function(t){const e=Ut(t,"border-top-width"),i=Ut(t,"border-bottom-width");return t.clientHeight+e+i}(t)}}const Kt=16384;function Ht(t){return new Promise(((e,i)=>{const r=new Image;r.onload=()=>{r.decode().then((()=>{requestAnimationFrame((()=>e(r)))}))},r.onerror=i,r.crossOrigin="anonymous",r.decoding="async",r.src=t}))}const Gt=(t,e)=>{if(t instanceof e)return!0;const i=Object.getPrototypeOf(t);return null!==i&&(i.constructor.name===e.name||Gt(i,e))};function Yt(t,e,i,r){const n=window.getComputedStyle(t,i),o=n.getPropertyValue("content");if(""===o||"none"===o)return;const s=Wt();try{e.className=`${e.className} ${s}`}catch(t){return}const a=document.createElement("style");a.appendChild(function(t,e,i,r){const n=`.${t}:${e}`,o=i.cssText?function(t){const e=t.getPropertyValue("content");return`${t.cssText} content: '${e.replace(/'|"/g,"")}';`}(i):function(t,e){return Vt(e).map((e=>`${e}: ${t.getPropertyValue(e)}${t.getPropertyPriority(e)?" !important":""};`)).join(" ")}(i,r);return document.createTextNode(`${n}{${o}}`)}(s,i,n,r)),e.appendChild(a)}const qt="application/font-woff",Xt="image/jpeg",Zt={woff:qt,woff2:qt,ttf:"application/font-truetype",eot:"application/vnd.ms-fontobject",png:"image/png",jpg:Xt,jpeg:Xt,gif:"image/gif",tiff:"image/tiff",svg:"image/svg+xml",webp:"image/webp"};function Jt(t){const e=function(t){const e=/\.([^./]*?)$/g.exec(t);return e?e[1]:""}(t).toLowerCase();return Zt[e]||""}function Qt(t){return-1!==t.search(/^(data:)/)}async function te(t,e,i){const r=await fetch(t,e);if(404===r.status)throw new Error(`Resource "${r.url}" not found`);const n=await r.blob();return new Promise(((t,e)=>{const o=new FileReader;o.onerror=e,o.onloadend=()=>{try{t(i({res:r,result:o.result}))}catch(t){e(t)}},o.readAsDataURL(n)}))}const ee={};async function ie(t,e,i){const r=function(t,e,i){let r=t.replace(/\?.*/,"");return i&&(r=t),/ttf|otf|eot|woff2?/i.test(r)&&(r=r.replace(/.*\//,"")),e?`[${e}]${r}`:r}(t,e,i.includeQueryParams);if(null!=ee[r])return ee[r];let n;i.cacheBust&&(t+=(/\?/.test(t)?"&":"?")+(new Date).getTime());try{const r=await te(t,i.fetchRequestInit,(({res:t,result:i})=>(e||(e=t.headers.get("Content-Type")||""),function(t){return t.split(/,/)[1]}(i))));n=function(t,e){return`data:${e};base64,${t}`}(r,e)}catch(e){n=i.imagePlaceholder||"";let r=`Failed to fetch resource: ${t}`;e&&(r="string"==typeof e?e:e.message),r&&console.warn(r)}return ee[r]=n,n}const re=t=>null!=t.tagName&&"SLOT"===t.tagName.toUpperCase(),ne=t=>null!=t.tagName&&"SVG"===t.tagName.toUpperCase();async function oe(t,e,i){return i||!e.filter||e.filter(t)?Promise.resolve(t).then((t=>async function(t,e){return Gt(t,HTMLCanvasElement)?async function(t){const e=t.toDataURL();return"data:,"===e?t.cloneNode(!1):Ht(e)}(t):Gt(t,HTMLVideoElement)?async function(t,e){if(t.currentSrc){const e=document.createElement("canvas"),i=e.getContext("2d");return e.width=t.clientWidth,e.height=t.clientHeight,null==i||i.drawImage(t,0,0,e.width,e.height),Ht(e.toDataURL())}const i=t.poster,r=Jt(i);return Ht(await ie(i,r,e))}(t,e):Gt(t,HTMLIFrameElement)?async function(t,e){var i;try{if(null===(i=null==t?void 0:t.contentDocument)||void 0===i?void 0:i.body)return await oe(t.contentDocument.body,e,!0)}catch(t){}return t.cloneNode(!1)}(t,e):t.cloneNode(ne(t))}(t,e))).then((i=>async function(t,e,i){var r,n;if(ne(e))return e;let o=[];return o=re(t)&&t.assignedNodes?Pt(t.assignedNodes()):Gt(t,HTMLIFrameElement)&&(null===(r=t.contentDocument)||void 0===r?void 0:r.body)?Pt(t.contentDocument.body.childNodes):Pt((null!==(n=t.shadowRoot)&&void 0!==n?n:t).childNodes),0===o.length||Gt(t,HTMLVideoElement)||await o.reduce(((t,r)=>t.then((()=>oe(r,i))).then((t=>{t&&e.appendChild(t)}))),Promise.resolve()),e}(t,i,e))).then((i=>function(t,e,i){return Gt(e,Element)&&(function(t,e,i){const r=e.style;if(!r)return;const n=window.getComputedStyle(t);n.cssText?(r.cssText=n.cssText,r.transformOrigin=n.transformOrigin):Vt(i).forEach((i=>{let o=n.getPropertyValue(i);if("font-size"===i&&o.endsWith("px")){const t=Math.floor(parseFloat(o.substring(0,o.length-2)))-.1;o=`${t}px`}Gt(t,HTMLIFrameElement)&&"display"===i&&"inline"===o&&(o="block"),"d"===i&&e.getAttribute("d")&&(o=`path(${e.getAttribute("d")})`),r.setProperty(i,o,n.getPropertyPriority(i))}))}(t,e,i),function(t,e,i){Yt(t,e,":before",i),Yt(t,e,":after",i)}(t,e,i),function(t,e){Gt(t,HTMLTextAreaElement)&&(e.innerHTML=t.value),Gt(t,HTMLInputElement)&&e.setAttribute("value",t.value)}(t,e),function(t,e){if(Gt(t,HTMLSelectElement)){const i=Array.from(e.children).find((e=>t.value===e.getAttribute("value")));i&&i.setAttribute("selected","")}}(t,e)),e}(t,i,e))).then((t=>async function(t,e){const i=t.querySelectorAll?t.querySelectorAll("use"):[];if(0===i.length)return t;const r={};for(let n=0;n<i.length;n++){const o=i[n].getAttribute("xlink:href");if(o){const i=t.querySelector(o),n=document.querySelector(o);i||!n||r[o]||(r[o]=await oe(n,e,!0))}}const n=Object.values(r);if(n.length){const e="http://www.w3.org/1999/xhtml",i=document.createElementNS(e,"svg");i.setAttribute("xmlns",e),i.style.position="absolute",i.style.width="0",i.style.height="0",i.style.overflow="hidden",i.style.display="none";const r=document.createElementNS(e,"defs");i.appendChild(r);for(let t=0;t<n.length;t++)r.appendChild(n[t]);t.appendChild(i)}return t}(t,e))):null}const se=/url\((['"]?)([^'"]+?)\1\)/g,ae=/url\([^)]+\)\s*format\((["']?)([^"']+)\1\)/g,le=/src:\s*(?:url\([^)]+\)\s*format\([^)]+\)[,;]\s*)+/g;function ce(t){return-1!==t.search(se)}async function he(t,e,i){if(!ce(t))return t;const r=function(t,{preferredFontFormat:e}){return e?t.replace(le,(t=>{for(;;){const[i,,r]=ae.exec(t)||[];if(!r)return"";if(r===e)return`src: ${i};`}})):t}(t,i),n=function(t){const e=[];return t.replace(se,((t,i,r)=>(e.push(r),t))),e.filter((t=>!Qt(t)))}(r);return n.reduce(((t,r)=>t.then((t=>async function(t,e,i,r){try{const n=i?function(t,e){if(t.match(/^[a-z]+:\/\//i))return t;if(t.match(/^\/\//))return window.location.protocol+t;if(t.match(/^[a-z]+:/i))return t;const i=document.implementation.createHTMLDocument(),r=i.createElement("base"),n=i.createElement("a");return i.head.appendChild(r),i.body.appendChild(n),e&&(r.href=e),n.href=t,n.href}(e,i):e,o=Jt(e);let s;return s=await ie(n,o,r),t.replace(function(t){const e=t.replace(/([.*+?^${}()|\[\]\/\\])/g,"\\$1");return new RegExp(`(url\\(['"]?)(${e})(['"]?\\))`,"g")}(e),`$1${s}$3`)}catch(t){}return t}(t,r,e,i)))),Promise.resolve(r))}async function ue(t,e,i){var r;const n=null===(r=e.style)||void 0===r?void 0:r.getPropertyValue(t);if(n){const r=await he(n,null,i);return e.style.setProperty(t,r,e.style.getPropertyPriority(t)),!0}return!1}async function de(t,e){Gt(t,Element)&&(await async function(t,e){await ue("background",t,e)||await ue("background-image",t,e),await ue("mask",t,e)||await ue("-webkit-mask",t,e)||await ue("mask-image",t,e)||await ue("-webkit-mask-image",t,e)}(t,e),await async function(t,e){const i=Gt(t,HTMLImageElement);if((!i||Qt(t.src))&&(!Gt(t,SVGImageElement)||Qt(t.href.baseVal)))return;const r=i?t.src:t.href.baseVal,n=await ie(r,Jt(r),e);await new Promise(((r,o)=>{t.onload=r,t.onerror=e.onImageErrorHandler?(...t)=>{try{r(e.onImageErrorHandler(...t))}catch(t){o(t)}}:o;const s=t;s.decode&&(s.decode=r),"lazy"===s.loading&&(s.loading="eager"),i?(t.srcset="",t.src=n):t.href.baseVal=n}))}(t,e),await async function(t,e){const i=Pt(t.childNodes).map((t=>de(t,e)));await Promise.all(i).then((()=>t))}(t,e))}const fe={};async function pe(t){let e=fe[t];if(null!=e)return e;const i=await fetch(t);return e={url:t,cssText:await i.text()},fe[t]=e,e}async function be(t,e){let i=t.cssText;const r=/url\(["']?([^"')]+)["']?\)/g,n=(i.match(/url\([^)]+\)/g)||[]).map((async n=>{let o=n.replace(r,"$1");return o.startsWith("https://")||(o=new URL(o,t.url).href),te(o,e.fetchRequestInit,(({result:t})=>(i=i.replace(n,`url(${t})`),[n,t])))}));return Promise.all(n).then((()=>i))}function ge(t){if(null==t)return[];const e=[];let i=t.replace(/(\/\*[\s\S]*?\*\/)/gi,"");const r=new RegExp("((@.*?keyframes [\\s\\S]*?){([\\s\\S]*?}\\s*?)})","gi");for(;;){const t=r.exec(i);if(null===t)break;e.push(t[0])}i=i.replace(r,"");const n=/@import[\s\S]*?url\([^)]*\)[\s\S]*?;/gi,o=new RegExp("((\\s*?(?:\\/\\*[\\s\\S]*?\\*\\/)?\\s*?@media[\\s\\S]*?){([\\s\\S]*?)}\\s*?})|(([\\s\\S]*?){([\\s\\S]*?)})","gi");for(;;){let t=n.exec(i);if(null===t){if(t=o.exec(i),null===t)break;n.lastIndex=o.lastIndex}else o.lastIndex=n.lastIndex;e.push(t[0])}return e}function ve(t){return t.trim().replace(/["']/g,"")}async function ke(t,e){const i=await async function(t,e){if(null==t.ownerDocument)throw new Error("Provided element is not within a Document");const i=Pt(t.ownerDocument.styleSheets),r=await async function(t,e){const i=[],r=[];return t.forEach((i=>{if("cssRules"in i)try{Pt(i.cssRules||[]).forEach(((t,n)=>{if(t.type===CSSRule.IMPORT_RULE){let o=n+1;const s=pe(t.href).then((t=>be(t,e))).then((t=>ge(t).forEach((t=>{try{i.insertRule(t,t.startsWith("@import")?o+=1:i.cssRules.length)}catch(e){console.error("Error inserting rule from remote css",{rule:t,error:e})}})))).catch((t=>{console.error("Error loading remote css",t.toString())}));r.push(s)}}))}catch(n){const o=t.find((t=>null==t.href))||document.styleSheets[0];null!=i.href&&r.push(pe(i.href).then((t=>be(t,e))).then((t=>ge(t).forEach((t=>{o.insertRule(t,o.cssRules.length)})))).catch((t=>{console.error("Error loading remote stylesheet",t)}))),console.error("Error inlining remote css file",n)}})),Promise.all(r).then((()=>(t.forEach((t=>{if("cssRules"in t)try{Pt(t.cssRules||[]).forEach((t=>{i.push(t)}))}catch(e){console.error(`Error while reading CSS rules from ${t.href}`,e)}})),i)))}(i,e);return function(t){return t.filter((t=>t.type===CSSRule.FONT_FACE_RULE)).filter((t=>ce(t.style.getPropertyValue("src"))))}(r)}(t,e),r=function(t){const e=new Set;return function t(i){(i.style.fontFamily||getComputedStyle(i).fontFamily).split(",").forEach((t=>{e.add(ve(t))})),Array.from(i.children).forEach((e=>{e instanceof HTMLElement&&t(e)}))}(t),e}(t);return(await Promise.all(i.filter((t=>r.has(ve(t.style.fontFamily)))).map((t=>he(t.cssText,t.parentStyleSheet?t.parentStyleSheet.href:null,e))))).join("\n")}async function me(t,e={}){const{width:i,height:r}=Nt(t,e),n=await oe(t,e,!0);return await async function(t,e){const i=null!=e.fontEmbedCSS?e.fontEmbedCSS:e.skipFonts?null:await ke(t,e);if(i){const e=document.createElement("style"),r=document.createTextNode(i);e.appendChild(r),t.firstChild?t.insertBefore(e,t.firstChild):t.appendChild(e)}}(n,e),await de(n,e),function(t,e){const{style:i}=t;e.backgroundColor&&(i.backgroundColor=e.backgroundColor),e.width&&(i.width=`${e.width}px`),e.height&&(i.height=`${e.height}px`);const r=e.style;null!=r&&Object.keys(r).forEach((t=>{i[t]=r[t]}))}(n,e),await async function(t,e,i){const r="http://www.w3.org/2000/svg",n=document.createElementNS(r,"svg"),o=document.createElementNS(r,"foreignObject");return n.setAttribute("width",`${e}`),n.setAttribute("height",`${i}`),n.setAttribute("viewBox",`0 0 ${e} ${i}`),o.setAttribute("width","100%"),o.setAttribute("height","100%"),o.setAttribute("x","0"),o.setAttribute("y","0"),o.setAttribute("externalResourcesRequired","true"),n.appendChild(o),o.appendChild(t),async function(t){return Promise.resolve().then((()=>(new XMLSerializer).serializeToString(t))).then(encodeURIComponent).then((t=>`data:image/svg+xml;charset=utf-8,${t}`))}(n)}(n,i,r)}const ye=class{get host(){return n(this)}workspace;async onWorkspaceChange(t){const e=t?.id;if(!e)return;await Promise.resolve();const i=this.core.store.state.activeWorkspace?.id;i!==e&&(this.core.beforeWorkspaceChange(),await this.initializeWorkspaceIfNeeded(t),this.activeWorkspaceChange.emit(this.core.store.state.activeWorkspace))}editorId;activeWorkspaceId;async onActiveWorkspaceIdChange(t){t&&this._isYjsInitialized&&await this.switchToWorkspaceById(t)}syncConfig;async onSyncConfigChange(t){this._syncConfigRevision++,this.core.setSyncConfig(t),t&&!this._isYjsInitialized&&this._isViewportReady&&await this.initializeSyncAndWorkspace()}assetStorageConfig;async onAssetStorageConfigChange(t){this._assetStorageConfigRevision++,this.core.setAssetStorageConfig(t),t&&!this._isAssetStorageInitialized&&this._isViewportReady&&await this.initializeAssetStorage()}user;onUserChange(t){this.core.setUser(t)}globalContextMenuItems;objectContextMenuItems;scaleMax=gt;validateScaleMax(t){t>gt?(console.warn("scaleMax cannot be greater than 1000."),this.scaleMax=gt,this.core.store.state.scaleMax=this.scaleMax):this.core.store.state.scaleMax=t}scaleMin=vt;validateScaleMin(t){t<vt?(console.warn("scaleMin cannot be less than 0.0001."),this.scaleMin=vt,this.core.store.state.scaleMin=this.scaleMin):this.core.store.state.scaleMin=t}cursorTarget;onCursorTargetChange(t){this.core.cursorManager.setTargetElement(t||document.body)}lockDrawingScale=!0;onLockDrawingScaleChange(t){this.core.store.state.lockDrawingScale=t}theme="light";onThemeChange(t){this.core.themeManager.setTheme(t)}viewportBoundaryLeft=-1/0;onViewportBoundaryLeftChange(t){this.core.store.state.viewportBoundaryLeft=t??-1/0}viewportBoundaryRight=1/0;onViewportBoundaryRightChange(t){this.core.store.state.viewportBoundaryRight=t??1/0}viewportBoundaryTop=-1/0;onViewportBoundaryTopChange(t){this.core.store.state.viewportBoundaryTop=t??-1/0}viewportBoundaryBottom=1/0;onViewportBoundaryBottomChange(t){this.core.store.state.viewportBoundaryBottom=t??1/0}debugInfo;onDebugInfoChange(t){t&&(this.core.store.state.debugInfo=t)}wheelEnabled=!0;isLoading=!1;onIsLoadingChange(){this.syncLoadingState()}isEngineReady;activeToolChange;objectsSelectionChange;workspacesChange;activeWorkspaceChange;longpress;objectsChange;objectsAdded;objectsRemoved;objectsUpdated;undoStateChange;objectsInViewportChange;viewportChange;awarenessChange;forceUpdate=0;async triggerSelectionChange(){this.objectsSelectionChange.emit()}handleWheel(t){this.core.store.isDisabled||this.wheelEnabled&&(this.core.store.state.isContextMenuVisible&&this.hideContextMenu(),this.viewport.handleWheel(t),this.core.store.state?.activeTool?.handleWheel(t))}handlePointerDown(t){this.core.store.isDisabled||(f.isTouchDevice()&&Y.onLongPress(t,(t=>this.longpress.emit(t))),this.host.setPointerCapture(t.pointerId),this.core.store.state.pointers.set(t.pointerId,t),this.viewport.handlePointerDown(t),this.core.store.state?.activeTool?.handlePointerDown(t))}throttledPointerMoveMulti=Ct.throttle((t=>{this.viewport.handlePointerMove(t),this.core.store.state?.activeTool?.handlePointerMove(t)}),16);handlePointerMove(t){this.core.store.isDisabled||(this.core.store.state.pointers.has(t.pointerId)&&this.core.store.state.pointers.set(t.pointerId,t),this.core.store.state.pointers.size>1&&this.throttledPointerMoveMulti(t),this.core.cursorManager.updateHoverState(t),this.viewport.handlePointerMove(t),this.core.store.state?.activeTool?.handlePointerMove(t))}handlePointerUp(t){this.core.store.isDisabled||(this.core.store.state.pointers.delete(t.pointerId),this.host.hasPointerCapture(t.pointerId)&&this.host.releasePointerCapture(t.pointerId),0===this.core.store.state.pointers.size&&this.core.cursorManager.resetToDefault(),this.viewport.handlePointerUp(t),this.core.store.state?.activeTool?.handlePointerUp(t))}handlePointerCancel(t){this.core.store.isDisabled||(this.host.hasPointerCapture(t.pointerId)&&this.host.releasePointerCapture(t.pointerId),this.core.store.state.pointers.delete(t.pointerId),0===this.core.store.state.pointers.size&&this.core.cursorManager.resetToDefault(),this.viewport.handlePointerUp(t),this.core.store.state?.activeTool?.handlePointerUp(t))}handlePointerLeave(){this.core.store.objects?.clearCursorPosition()}handleLongPress(t){this.contextMenuHandler.handleContextMenu(t.detail)}handleContextMenu(t){t.cancelable&&t.preventDefault(),this.core.store.isDisabled||"touch"!==t.pointerType&&"pen"!==t.pointerType&&this.contextMenuHandler.handleContextMenu(t)}handleResize(){this.viewport.handleResize()}handleKeyDown(t){!this.core.store.isDisabled&&this.shouldHandleKeyboardEvent(t)&&this.keyHandler.handleKeyDown(t)}handleKeyUp(t){!this.core.store.isDisabled&&this.shouldHandleKeyboardEvent(t)&&this.keyHandler.handleKeyUp(t)}shouldHandleKeyboardEvent(t){const e=t.composedPath();if(e.includes(this.host))return!0;if(e.some((t=>t instanceof HTMLElement&&("DIALOG"===t.tagName||"KRITZEL-DIALOG"===t.tagName||"dialog"===t.getAttribute?.("role")||"alertdialog"===t.getAttribute?.("role")))))return!1;const i=t.target;return!i.matches?.('input, textarea, select, [contenteditable="true"], [contenteditable=""]')}preventDoubleTapZoomOnTouchDevices(t){t.cancelable&&t.preventDefault()}async registerTool(t,e,i){if("function"!=typeof e||!(e.prototype instanceof q))return console.error(`Failed to register tool "${t}": Tool class must be a constructor function`),null;const r=T.registerTool(t,e,this.core);return i&&Object.entries(i).forEach((([t,e])=>{r[t]=e})),Promise.resolve(r)}async changeActiveTool(t){this.core.store.state.activeTool!==t&&(this.core.store.state.activeTool?.onDeactivate(),this.core.store.setState("activeTool",t),this.core.deselectAllObjects(),t?.onActivate())}async disable(){this.core.store.state.isEnabled=!1,this.core.rerender()}async enable(){this.core.store.state.isEnabled=!0,this.core.rerender()}async delete(){this.core.delete()}async copy(){this.core.copy()}async cut(){this.core.cut()}async paste(t,e){this.core.paste(t,e)}async bringForward(t){this.core.bringForward(t)}async sendBackward(t){this.core.sendBackward(t)}async bringToFront(t){this.core.bringToFront(t)}async sendToBack(t){this.core.sendToBack(t)}async alignObjects(t){this.core.alignObjects(t)}async group(){this.core.group()}async ungroup(){this.core.ungroup()}async undo(){this.core.undo()}async redo(){this.core.redo()}async hideContextMenu(){this.core.store.state.pointers.clear(),this.core.store.state.isContextMenuVisible=!1,this.core.store.objects?.remove((t=>t instanceof I)),this.core.store.setSelectionBox(null),this.core.store.objects?.clearLocalSelectionBox(),this.core.store.state.isSelecting=!1,this.core.store.state.isEnabled=!0,this.core.rerender()}async getObjectById(t){return this.core.store.allObjects.find((e=>e.id===t))||null}async getAllObjects(){return this.core.store.allObjects}async findObjects(t){return this.core.store.allNonSelectionObjects.filter(t)}async getObjectsTotalCount(){return this.core.store.totalObjectCount}async addObject(t){if(this.core.deselectAllObjects(),t.id=t.generateId(),t._core=this.core,t.scale=this.core.store.state.scale,t.zIndex=this.core.store.currentZIndex,t.workspaceId=this.core.store.state.activeWorkspace.id,G.isInstanceOf(t,"KritzelText")){const e=t.content;t.editor=t.createEditor(),e&&t.setContent(e)}if(G.isInstanceOf(t,"KritzelGroup")&&t._pendingChildren.length>0){t.childIds=[];const e=new Map;t._pendingChildren.forEach((i=>{const r=i.id;i.id=i.generateId(),i._core=this.core,i.scale=this.core.store.state.scale,i.zIndex=this.core.store.currentZIndex,i.workspaceId=this.core.store.state.activeWorkspace.id,e.set(r,i.id),t.childIds.push(i.id)})),t._pendingChildren.forEach((t=>{G.isInstanceOf(t,"KritzelLine")&&(t.startAnchor&&e.has(t.startAnchor.objectId)&&(t.startAnchor={objectId:e.get(t.startAnchor.objectId)}),t.endAnchor&&e.has(t.endAnchor.objectId)&&(t.endAnchor={objectId:e.get(t.endAnchor.objectId)}))})),t._pendingChildren.forEach((t=>{this.core.addObject(t)})),t._pendingChildren=[],t.finalize(),this.core.anchorManager.rebuildIndex()}return this.core.addObject(t),this.core.rerender(),await new Promise((t=>{requestAnimationFrame((()=>requestAnimationFrame((()=>t()))))})),this.emitObjectsAdded([t]),t}async updateObject(t,e){return this.core.deselectAllObjects(),this.core.updateObject(t,e),this.core.rerender(),this.emitObjectsUpdated([{object:t,changedProperties:Object.keys(e)}]),t}async removeObject(t){const e=this.core.store.objects;return e?(this.core.deselectAllObjects(),e.remove((e=>e.id===t.id)),this.core.rerender(),this.emitObjectsRemoved([t]),t):null}async getSelectedObjects(){const t=this.core.store.selectionGroup;return t?t.objects:[]}async getDisplayableShortcuts(){return this.keyHandler.getDisplayableShortcuts()}async selectObjects(t){const e=T.getTool("selection");e&&(this.core.store.state.activeTool?.onDeactivate(),this.core.store.setState("activeTool",e),this.core.deselectAllObjects(),this.core.selectObjects(t))}async selectAllObjectsInViewport(){const t=T.getTool("selection");t&&(this.core.store.state.activeTool?.onDeactivate(),this.core.store.setState("activeTool",t),this.core.deselectAllObjects(),this.core.selectAllObjectsInViewport())}async clearSelection(){this.core.clearSelection()}async centerObjectInViewport(t){return t.centerInViewport(),this.core.updateObject(t,t),this.core.rerender(),t}async backToContent(){return this.viewport.centerFitNearestContent(20)}async centerAllObjects(t=!0){return this.viewport.centerFitAllObjects(t)}async setViewport(t,e,i){this.viewport.setViewport(t,e,i)}async panTo(t,e){this.viewport.panTo(t,e)}async zoomTo(t,e,i){this.viewport.zoomTo(t,e,i)}async getViewport(){return this.viewport.getViewport()}async screenToWorld(t,e){return this.viewport.screenToWorld(t,e)}async worldToScreen(t,e){return this.viewport.worldToScreen(t,e)}async getCopiedObjects(){return this.core.store.state.copiedObjects||[]}async getObjectsInViewport(){return this.core.getObjectsInViewport()}async getScreenshot(t="png"){if(!this.host)return null;const e={objects:this.core.store.objects,activeWorkspace:this.core.store.state.activeWorkspace,workspaces:this.core.store.state.workspaces,activeTool:this.core.store.state.activeTool,isReady:this.core.store.state.isReady,translateX:this.core.store.state.translateX,translateY:this.core.store.state.translateY,scale:this.core.store.state.scale},i={filter:t=>!("KRITZEL-CONTEXT-MENU"===t.tagName||t.classList&&t.classList.contains("debug-panel"))};let r;try{r="svg"===t?await me(this.host,i):await async function(t,e={}){return(await async function(t,e={}){const{width:i,height:r}=Nt(t,e),n=await me(t,e),o=await Ht(n),s=document.createElement("canvas"),a=s.getContext("2d"),l=e.pixelRatio||function(){let t,e;try{e=process}catch(t){}const i=e&&e.env?e.env.devicePixelRatio:null;return i&&(t=parseInt(i,10),Number.isNaN(t)&&(t=1)),t||window.devicePixelRatio||1}(),c=e.canvasWidth||i,h=e.canvasHeight||r;return s.width=c*l,s.height=h*l,e.skipAutoScale||function(t){(t.width>Kt||t.height>Kt)&&(t.width>Kt&&t.height>Kt?t.width>t.height?(t.height*=Kt/t.width,t.width=Kt):(t.width*=Kt/t.height,t.height=Kt):t.width>Kt?(t.height*=Kt/t.width,t.width=Kt):(t.width*=Kt/t.height,t.height=Kt))}(s),s.style.width=`${c}`,s.style.height=`${h}`,e.backgroundColor&&(a.fillStyle=e.backgroundColor,a.fillRect(0,0,s.width,s.height)),a.drawImage(o,0,0,s.width,s.height),s}(t,e)).toDataURL()}(this.host,i)}finally{this.core.store.state.objects=e.objects,this.core.store.state.activeWorkspace=e.activeWorkspace,this.core.store.state.workspaces=e.workspaces,this.core.store.state.activeTool=e.activeTool,this.core.store.state.isReady=e.isReady,this.core.store.state.translateX=e.translateX,this.core.store.state.translateY=e.translateY,this.core.store.state.scale=e.scale,this.core.rerender()}return r}async exportViewportAsPng(){try{const t=`${this.core.store.state?.activeWorkspace?.name||"workspace"}-${(new Date).toISOString().replace(/[:.]/g,"-")}.png`,e=await this.getScreenshot("png");if(!e)return void console.error("Failed to export viewport as PNG: screenshot could not be generated");const i=document.createElement("a");i.download=t,i.href=e,i.click()}catch(t){console.error("Failed to export viewport as PNG:",t)}}async exportViewportAsSvg(){try{const t=`${this.core.store.state?.activeWorkspace?.name||"workspace"}-${(new Date).toISOString().replace(/[:.]/g,"-")}.svg`,e=await this.getScreenshot("svg");if(!e)return void console.error("Failed to export viewport as SVG: screenshot could not be generated");const i=document.createElement("a");i.download=t,i.href=e,i.click()}catch(t){console.error("Failed to export viewport as SVG:",t)}}async getSelectedObjectsAsSvgString(t){const e=await this.getSelectedObjects();if(!e||0===e.length)return null;const i=t?.theme??this.core.themeManager.getStoredTheme();return Rt.generateSvg(e,{theme:i,padding:t?.padding??0,includeXmlDeclaration:!0})}async exportSelectedObjectsAsSvg(t){try{const e=await this.getSelectedObjectsAsSvgString(t);if(!e)return void console.warn("No objects selected for SVG export");const i=`selection-${(new Date).toISOString().replace(/[:.]/g,"-")}.svg`,r=new Blob([e],{type:"image/svg+xml;charset=utf-8"}),n=URL.createObjectURL(r),o=document.createElement("a");o.download=i,o.href=n,o.click(),URL.revokeObjectURL(n)}catch(t){console.error("Failed to export selected objects as SVG:",t)}}async getSelectedObjectsAsPngDataUrl(t){const e=await this.getSelectedObjectsAsSvgString({theme:t?.theme,padding:t?.padding});if(!e)return null;const i=t?.scale??2;return new Promise(((t,r)=>{const n=new Image,o=new Blob([e],{type:"image/svg+xml;charset=utf-8"}),s=URL.createObjectURL(o);n.onload=()=>{const e=document.createElement("canvas");e.width=n.width*i,e.height=n.height*i;const o=e.getContext("2d");if(!o)return URL.revokeObjectURL(s),void r(new Error("Failed to get canvas context"));o.scale(i,i),o.drawImage(n,0,0),URL.revokeObjectURL(s),t(e.toDataURL("image/png"))},n.onerror=()=>{URL.revokeObjectURL(s),r(new Error("Failed to load SVG for PNG conversion"))},n.src=s}))}async exportSelectedObjectsAsPng(t){try{const e=await this.getSelectedObjectsAsPngDataUrl(t);if(!e)return void console.warn("No objects selected for PNG export");const i=`selection-${(new Date).toISOString().replace(/[:.]/g,"-")}.png`,r=document.createElement("a");r.download=i,r.href=e,r.click()}catch(t){console.error("Failed to export selected objects as PNG:",t)}}async exportAsJson(){const t=this.core.store.state.activeWorkspace;if(!t)throw new Error("Cannot export workspace: no active workspace is loaded");const e=t.serialize({includeObjects:!0});return JSON.stringify(e,null,2)}async importFromJson(t){const e=JSON.parse(t);if(!e.__class__||"KritzelWorkspace"!==e.__class__)throw new Error("Invalid workspace data: missing or incorrect __class__ identifier");e.version&&e.version!==X&&console.warn(`Workspace version mismatch: expected ${X}, got ${e.version}`);const i=V.generateUUID();let r=e.viewport||{centerWorldX:0,centerWorldY:0,scale:1};if("translateX"in r&&!("centerWorldX"in r)){const t=r.scale??1;r={centerWorldX:-(r.translateX??0)/t,centerWorldY:-(r.translateY??0)/t,scale:t}}const n=new _(i,e.name||"Imported Workspace",r);if(this.core.createWorkspace(n),this.workspacesChange.emit(this.core.store.state.workspaces),this.core.beforeWorkspaceChange(),await this.core.initializeWorkspace(n),e.objects&&Array.isArray(e.objects)){const t=new jt(this.core);for(const r of e.objects){const e=t.revive(r);e&&(e.workspaceId=i,this.core.addObject(e))}}this.core.rerender(),this.activeWorkspaceChange.emit(n)}async loadObjectsFromJson(t){const e=JSON.parse(t);if(!e.__class__||"KritzelWorkspace"!==e.__class__)throw new Error("Invalid workspace data: missing or incorrect __class__ identifier");e.version&&e.version!==X&&console.warn(`Workspace version mismatch: expected ${X}, got ${e.version}`);const i=this.core.store.state.activeWorkspace;if(!i)throw new Error("Cannot load objects: no active workspace is loaded");const r=i.id;let n=0;if(e.objects&&Array.isArray(e.objects)){const t=new jt(this.core);for(const i of e.objects){const e=t.revive(i);e&&(e.workspaceId=r,this.core.addObject(e),n++)}}return this.core.rerender(),n}async downloadAsJson(t){try{const e=await this.exportAsJson(),i=this.core.store.state?.activeWorkspace?.name||"workspace",r=(new Date).toISOString().replace(/[:.]/g,"-"),n=t||`${i}-${r}`,o=new Blob([e],{type:"application/json;charset=utf-8"}),s=URL.createObjectURL(o),a=document.createElement("a");a.download=`${n}.json`,a.href=s,a.click(),URL.revokeObjectURL(s)}catch(t){console.error("Failed to download workspace as JSON:",t)}}async importFromFile(){return new Promise(((t,e)=>{const i=document.createElement("input");i.type="file",i.accept=".json,application/json",i.style.display="none";const r=()=>{i.removeEventListener("change",n),i.removeEventListener("cancel",o),document.body.removeChild(i)},n=async i=>{const n=i.target,o=n.files?.[0];if(!o)return r(),void t();try{const i=new FileReader;i.onload=async i=>{try{const e=i.target?.result;await this.importFromJson(e),r(),t()}catch(t){r(),console.error("Failed to import workspace from file:",t),e(t)}},i.onerror=()=>{r(),console.error("Failed to read file:",i.error),e(i.error)},i.readAsText(o)}catch(t){r(),console.error("Failed to process file:",t),e(t)}},o=()=>{r(),t()};i.addEventListener("change",n),i.addEventListener("cancel",o),document.body.appendChild(i),i.click()}))}async createWorkspace(t){return await this.core.createWorkspace(t),this.workspacesChange.emit(this.core.store.state.workspaces),t}async updateWorkspace(t){await this.core.updateWorkspace(t),this.workspacesChange.emit(this.core.store.state.workspaces)}async deleteWorkspace(t){await this.core.deleteWorkspace(t),this.workspacesChange.emit(this.core.store.state.workspaces)}async getWorkspaces(){return await this.core.getWorkspaces()}async getActiveWorkspace(){const t=this.core.store.state.activeWorkspace;if(!t)throw new Error("No active workspace is loaded");return t}async getIsPublic(){return this.core.getIsPublic()}async loadSharedWorkspace(t){const e=t;let i=this.core.getWorkspaces().find((t=>t.id===e));i?i.isPublic=!0:(i=new _(e,"Shared Workspace"),i.isPublic=!0,this.core.createWorkspace(i)),this.workspacesChange.emit(this.core.store.state.workspaces),this.core.beforeWorkspaceChange(),await this.initializeWorkspaceIfNeeded(i),this.activeWorkspaceChange.emit(this.core.store.state.activeWorkspace)}async reinitSync(){this.core.setSyncConfig(this.syncConfig),this.core.setAssetStorageConfig(this.assetStorageConfig),this.core.store.objects?.clearCursorPosition(),this.core.store.objects?.destroy(),this.core.appStateMap.destroy(),this.core.assetResolver.destroy(),this._isYjsInitialized=!1,this._isAssetStorageInitialized=!1,await this.initializeSyncAndWorkspace()}core;viewport;contextMenuHandler;keyHandler;contextMenuElement=null;_lastHadSelectionGroup=!1;_isViewportReady=!1;_isYjsInitialized=!1;_isAssetStorageInitialized=!1;_isResolvingActiveWorkspaceId=!1;_stateChangeListenersRegistered=!1;_workspaceInitializationPromise=null;_workspaceInitializationTargetKey=null;_syncInitPromise=null;_syncConfigRevision=0;_assetStorageConfigRevision=0;_isWorkspaceLoading=!1;_defaultUndoState={canUndo:!1,canRedo:!1,undoStackSize:0,redoStackSize:0};syncLoadingState(){this.core.store.state.isLoading=this._isWorkspaceLoading||this.isLoading}get isSelecting(){return this.core.store.state.activeTool instanceof l&&this.core.store.state.isSelecting}get isSelectionActive(){return this.core.store.state.activeTool instanceof l&&null!==this.core.store.selectionGroup}constructor(e){t(this,e),this.isEngineReady=r(this,"isEngineReady"),this.activeToolChange=r(this,"activeToolChange"),this.objectsSelectionChange=r(this,"objectsSelectionChange"),this.workspacesChange=r(this,"workspacesChange"),this.activeWorkspaceChange=r(this,"activeWorkspaceChange"),this.longpress=r(this,"longpress"),this.objectsChange=r(this,"objectsChange"),this.objectsAdded=r(this,"objectsAdded"),this.objectsRemoved=r(this,"objectsRemoved"),this.objectsUpdated=r(this,"objectsUpdated"),this.undoStateChange=r(this,"undoStateChange"),this.objectsInViewportChange=r(this,"objectsInViewportChange"),this.viewportChange=r(this,"viewportChange"),this.awarenessChange=r(this,"awarenessChange"),this.core=new Lt(this)}disconnectedCallback(){this.throttledPointerMoveMulti.cancel(),this.core.store.objects?.clearCursorPosition(),this.core.store.objects&&this.core.store.objects.destroy(),this.core.appStateMap.destroy(),this.core.cursorManager.cleanup(),this.core.themeManager.cleanup()}componentWillLoad(){this.core.setEditorId(this.editorId),this.core.setUser(this.user),this.validateScaleMax(this.scaleMax),this.validateScaleMin(this.scaleMin),this.core.store.state.lockDrawingScale=this.lockDrawingScale,this.core.store.state.viewportBoundaryLeft=this.viewportBoundaryLeft,this.core.store.state.viewportBoundaryRight=this.viewportBoundaryRight,this.core.store.state.viewportBoundaryTop=this.viewportBoundaryTop,this.core.store.state.viewportBoundaryBottom=this.viewportBoundaryBottom,this._isWorkspaceLoading=!0,this.syncLoadingState()}async componentDidLoad(){setTimeout((async()=>{this.contextMenuHandler=new $t(this.core,this.globalContextMenuItems,this.objectContextMenuItems),this.keyHandler=new It(this.core),this.viewport=new St(this.core,this.host),this._isViewportReady=!0,this.core.cursorManager.setTargetElement(this.cursorTarget||document.body),this.host.shadowRoot&&this.core.cursorManager.setShadowRoot(this.host.shadowRoot);const t=this.host.closest("kritzel-editor");this.core.themeManager.setTargetElement(t||this.host),await this.initializeSyncAndWorkspace(),!1===this.core.store.state.isReady&&(this.core.store.state.isReady=!0,this.isEngineReady.emit(this.core.store.state))}),50)}async initializeSyncAndWorkspace(){if(this._syncInitPromise)return this._syncInitPromise;this._syncInitPromise=this.doInitializeSyncAndWorkspace();try{await this._syncInitPromise}finally{this._syncInitPromise=null}}async initializeAssetStorage(){if(this._isAssetStorageInitialized)return;const t=this._assetStorageConfigRevision;this.core.setAssetStorageConfig(this.assetStorageConfig),await this.core.initializeAssetStorage(),t!==this._assetStorageConfigRevision&&(this.core.assetResolver.destroy(),this.core.setAssetStorageConfig(this.assetStorageConfig),await this.core.initializeAssetStorage()),this._isAssetStorageInitialized=!0}async doInitializeSyncAndWorkspace(){const t=this._syncConfigRevision;if(this.core.setSyncConfig(this.syncConfig),this.core.setAssetStorageConfig(this.assetStorageConfig),this._isYjsInitialized||(await this.core.initializeYjs(),t!==this._syncConfigRevision&&(this.core.appStateMap.destroy(),this.core.setSyncConfig(this.syncConfig),this.core.setAssetStorageConfig(this.assetStorageConfig),await this.core.initializeYjs()),this._isYjsInitialized=!0),!this._isAssetStorageInitialized&&this.assetStorageConfig&&await this.initializeAssetStorage(),this.activeWorkspaceId){const t=this.core.getWorkspaces().find((t=>t.id===this.activeWorkspaceId));t?await this.initializeWorkspaceIfNeeded(t):await this.initializeWorkspaceIfNeeded()}else{const t=this.resolveStartupWorkspace();await this.initializeWorkspaceIfNeeded(t)}const e=this.core.store.state.activeWorkspace;e&&this.activeWorkspaceChange.emit(e),this._stateChangeListenersRegistered||(this.core.appStateMap.onRemoteChange((()=>{this.workspacesChange.emit(this.core.store.state.workspaces),this.tryResolveActiveWorkspaceFromId()})),this._registerStateChangeListeners(),this._stateChangeListenersRegistered=!0),this.tryResolveActiveWorkspaceFromId()}resolveStartupWorkspace(){if(this.activeWorkspaceId){const t=this.core.getWorkspaces().find((t=>t.id===this.activeWorkspaceId));if(t)return t;console.warn(`[KritzelEngine] No workspace found with ID: ${this.activeWorkspaceId}`)}return this.workspace}tryResolveActiveWorkspaceFromId(){this.activeWorkspaceId&&!this._isResolvingActiveWorkspaceId&&this.core.store.state.activeWorkspace?.id!==this.activeWorkspaceId&&(this._isResolvingActiveWorkspaceId=!0,this.switchToWorkspaceById(this.activeWorkspaceId,!1).finally((()=>{this._isResolvingActiveWorkspaceId=!1})))}async switchToWorkspaceById(t,e=!0){const i=this.core.getWorkspaces().find((e=>e.id===t));i?this.core.store.state.activeWorkspace?.id!==i.id&&(this.core.beforeWorkspaceChange(),await this.initializeWorkspaceIfNeeded(i),this.activeWorkspaceChange.emit(this.core.store.state.activeWorkspace)):e&&console.warn(`[KritzelEngine] No workspace found with ID: ${t}`)}async initializeWorkspaceIfNeeded(t,e){const i=t?.id??null,r=i??(e?.skipFallbackCreation?"__NO_FALLBACK__":"__AUTO__");if(i&&this.core.store.state.activeWorkspace?.id===i)return;if(this._workspaceInitializationPromise&&this._workspaceInitializationTargetKey===r)return void await this._workspaceInitializationPromise;this._isWorkspaceLoading=!0,this.syncLoadingState();const n=this.core.initializeWorkspace(t,e);this._workspaceInitializationPromise=n,this._workspaceInitializationTargetKey=r;try{await n}finally{this._workspaceInitializationPromise===n&&(this._workspaceInitializationPromise=null,this._workspaceInitializationTargetKey=null),this._isWorkspaceLoading=!1,this.syncLoadingState()}}emitObjectsChange(){const t=this.core.store.objects;if(!t)return this.objectsChange.emit([]),this.undoStateChange.emit(this._defaultUndoState),void(this._lastHadSelectionGroup&&(this._lastHadSelectionGroup=!1,this.objectsSelectionChange.emit()));const e=t.undoState,i=null!==this.core.store.selectionGroup;this.objectsChange.emit(this.core.store.allObjects),this.undoStateChange.emit(e),this._lastHadSelectionGroup!==i&&(this._lastHadSelectionGroup=i,this.objectsSelectionChange.emit())}emitObjectsAdded(t){this.objectsAdded.emit({objects:t})}emitObjectsRemoved(t){this.objectsRemoved.emit({objects:t})}emitObjectsUpdated(t){this.objectsUpdated.emit({objects:t})}emitAwarenessChange(t){this.awarenessChange.emit(t)}emitObjectsInViewportChange(){this.objectsInViewportChange.emit(this.core.store.objectsInViewport)}_registerStateChangeListeners(){this.core.store.onStateChange("activeTool",this._handleActiveToolChange.bind(this))}_handleActiveToolChange(t){t instanceof l||(this.core.clearSelection(),this.core.store.objects?.remove((t=>t instanceof I)),this.core.store.setSelectionBox(null),this.core.store.objects?.clearLocalSelectionBox(),this.core.store.state.isSelecting=!1,this.core.store.state.isResizeHandleSelected=!1,this.core.store.state.isRotationHandleSelected=!1),t instanceof d||this.core.resetActiveText(),t instanceof u||this.core.resetActiveShape(),this.core.store.state.skipContextMenu=!1,this.core.store.state.copiedObjects=void 0,t&&this.activeToolChange.emit(t),M.forceHideKeyboard(),this.core.rerender()}render(){if(!this.viewport)return e(i,null,this.core.store.state.isLoading&&e("div",{class:"workspace-loading-overlay"},e("span",{class:"workspace-loading-spinner"}),"Loading..."));const t=this.core.themeManager.getStoredTheme(),r=window.getComputedStyle(this.host).getPropertyValue("--kritzel-selection-handle-size").trim()||"6px",n=parseFloat(r),o=2*n<14?14:n,s=this.core.store.state.viewportWidth/2+this.core.store.state.translateX,l=this.core.store.state.viewportHeight/2+this.core.store.state.translateY,c=this.core.store.objectsInViewport;return this.core.cursorManager.applyCursor(),this.core.store.state.hasViewportChanged&&(this.viewportChange.emit(this.viewport.getViewport()),this.core.store.totalObjectCount>0&&this.emitObjectsInViewportChange()),e(i,null,this.core.store.state.isLoading&&e("div",{class:"workspace-loading-overlay"},e("span",{class:"workspace-loading-spinner"}),"Loading..."),this.core.store.state.debugInfo.showViewportInfo&&e("div",{class:"debug-panel"},e("div",null,"ActiveWorkspaceId: ",this.core.store.state?.activeWorkspace?.id),e("div",null,"ActiveWorkspaceName: ",this.core.store.state?.activeWorkspace?.name),e("div",null,"TranslateX: ",this.core.store.state?.translateX),e("div",null,"TranslateY: ",this.core.store.state?.translateY),e("div",null,"ViewportWidth: ",this.core.store.state?.viewportWidth),e("div",null,"ViewportHeight: ",this.core.store.state?.viewportHeight),e("div",null,"PointerCount: ",this.core.store.state.pointers.size),e("div",null,"Scale: ",this.core.store.state?.scale),e("div",null,"ActiveTool: ",this.core.store.state?.activeTool?.name),e("div",null,"HasViewportChanged: ",this.core.store.state?.hasViewportChanged?"true":"false"),e("div",null,"IsEnabled: ",this.core.store.state?.isEnabled?"true":"false"),e("div",null,"IsScaling: ",this.core.store.state?.isScaling?"true":"false"),e("div",null,"IsPanning: ",this.core.store.state?.isPanning?"true":"false"),e("div",null,"IsSelecting: ",this.isSelecting?"true":"false"),e("div",null,"IsSelectionActive: ",this.isSelectionActive?"true":"false"),e("div",null,"IsResizeHandleSelected: ",this.core.store.state.isResizeHandleSelected?"true":"false"),e("div",null,"IsRotationHandleSelected: ",this.core.store.state.isRotationHandleSelected?"true":"false"),e("div",null,"IsRotationHandleHovered: ",this.core.store.state.isRotationHandleHovered?"true":"false"),e("div",null,"IsDrawing: ",this.core.store.state.isDrawing?"true":"false"),e("div",null,"IsWriting: ",this.core.store.state.isWriting?"true":"false"),e("div",null,"IsPointerDown: ",this.core.store.isPointerDown?"true":"false"),e("div",null,"PointerX: ",this.core.store.state?.pointerX),e("div",null,"PointerY: ",this.core.store.state?.pointerY),e("div",null,"TotalObjects: ",this.core.store.totalObjectCount),e("div",null,"ObjectsInViewport: ",this.core.store.objectsInViewport.length),e("div",null,"SelectedObjects: ",this.core.store.selectionGroup?.objects.length||0),e("div",null,"ViewportCenter: (",s.toFixed(2),", ",l.toFixed(2),")")),e("div",{id:"origin",class:"origin",style:{transform:`matrix(${this.core.store.state?.scale}, 0, 0, ${this.core.store.state?.scale}, ${this.core.store.state?.translateX}, ${this.core.store.state?.translateY})`}},c?.map((i=>e("div",{key:i.id,id:i.id,class:"object",style:{transform:i?.transformationMatrix,transformOrigin:"top left",position:"absolute",zIndex:i.zIndex.toString(),pointerEvents:this.core.store.state.isScaling?"none":"auto"}},G.isInstanceOf(i,"KritzelPath")&&e("svg",{ref:t=>t&&i.mount(t),xmlns:"http://www.w3.org/2000/svg",style:{height:i?.totalHeight+"px",width:i?.totalWidth+"px",left:"0",top:"0",position:"absolute",transform:0!==i.rotationDegrees?`rotate(${i.rotationDegrees}deg)`:void 0,transformOrigin:0!==i.rotationDegrees?`${i.totalWidth/2}px ${i.totalHeight/2}px`:void 0,opacity:i.markedForRemoval?"0.5":i.opacity.toString(),pointerEvents:i.markedForRemoval?"none":"auto",overflow:"visible"},viewBox:i?.viewBox},e("path",{d:i?.d,fill:a.resolveThemeColor(i.fill,t),stroke:a.resolveThemeColor(i?.stroke,t),"shape-rendering":i.isLowRes()?"optimizeSpeed":"auto"})),G.isInstanceOf(i,"KritzelLine")&&e("svg",{ref:t=>t&&i.mount(t),xmlns:"http://www.w3.org/2000/svg",style:{height:i?.totalHeight+"px",width:i?.totalWidth+"px",left:"0",top:"0",position:"absolute",transform:0!==i.rotationDegrees?`rotate(${i.rotationDegrees}deg)`:void 0,transformOrigin:0!==i.rotationDegrees?`${i.totalWidth/2}px ${i.totalHeight/2}px`:void 0,opacity:i.markedForRemoval?"0.5":i.opacity.toString(),pointerEvents:i.markedForRemoval?"none":"auto",overflow:"visible"},viewBox:i?.viewBox},(i.hasStartArrow||i.hasEndArrow)&&e("defs",null,i.hasStartArrow&&e("marker",{id:i.startMarkerId,markerWidth:i.getArrowSize("start"),markerHeight:i.getArrowSize("start"),refX:0,refY:i.getArrowSize("start")/2,orient:"auto-start-reverse",markerUnits:"userSpaceOnUse"},e("path",{d:i.getArrowPath(i.arrows?.start?.style),fill:i.getArrowFill("start"),transform:`scale(${i.getArrowSize("start")/10})`})),i.hasEndArrow&&e("marker",{id:i.endMarkerId,markerWidth:i.getArrowSize("end"),markerHeight:i.getArrowSize("end"),refX:0,refY:i.getArrowSize("end")/2,orient:"auto",markerUnits:"userSpaceOnUse"},e("path",{d:i.getArrowPath(i.arrows?.end?.style),fill:i.getArrowFill("end"),transform:`scale(${i.getArrowSize("end")/10})`}))),e("path",{d:this.core.anchorManager.computeClippedLinePath(i),fill:"none",stroke:"transparent","stroke-width":Math.max(i?.strokeWidth||0,10),"stroke-linecap":"round"}),e("path",{d:this.core.anchorManager.computeClippedLinePath(i),fill:"none",stroke:a.resolveThemeColor(i?.stroke,t),"stroke-width":i?.strokeWidth,"stroke-linecap":"round","marker-start":i.hasStartArrow?`url(#${i.startMarkerId})`:void 0,"marker-end":i.hasEndArrow?`url(#${i.endMarkerId})`:void 0})),G.isInstanceOf(i,"KritzelImage")&&"ready"===i.loadState&&e("img",{ref:t=>t&&i.mount(t),src:i.resolvedSrc||i.src,style:{position:"absolute",left:"0",top:"0",width:i.totalWidth+"px",height:i.totalHeight+"px",transform:0!==i.rotationDegrees?`rotate(${i.rotationDegrees}deg)`:void 0,transformOrigin:0!==i.rotationDegrees?`${i.totalWidth/2}px ${i.totalHeight/2}px`:void 0,opacity:i.markedForRemoval?"0.5":i.opacity.toString(),pointerEvents:i.markedForRemoval?"none":"auto",backgroundColor:a.resolveThemeColor(i.backgroundColor,t),borderColor:a.resolveThemeColor(i.borderColor,t),borderWidth:i.borderWidth+"px",borderStyle:"solid",padding:i.padding+"px",overflow:"visible",userSelect:"none",imageRendering:this.core.store.state.isScaling||this.core.store.state.isPanning?"pixelated":"auto"},draggable:!1,decoding:"async",loading:"eager",onDragStart:t=>t.preventDefault()}),G.isInstanceOf(i,"KritzelImage")&&"ready"!==i.loadState&&e("div",{ref:()=>i.ensureLoaded(),style:{position:"absolute",left:"0",top:"0",width:i.totalWidth+"px",height:i.totalHeight+"px",transform:0!==i.rotationDegrees?`rotate(${i.rotationDegrees}deg)`:void 0,transformOrigin:0!==i.rotationDegrees?`${i.totalWidth/2}px ${i.totalHeight/2}px`:void 0,opacity:i.markedForRemoval?"0.5":i.opacity.toString(),pointerEvents:i.markedForRemoval?"none":"auto",backgroundColor:a.resolveThemeColor({light:"#e5e7eb",dark:"#2a2a2a"},t),borderColor:a.resolveThemeColor("error"===i.loadState?{light:"#9ca3af",dark:"#6b7280"}:i.borderColor,t),borderWidth:"error"===i.loadState?"1px":i.borderWidth+"px",borderStyle:"solid",padding:i.padding+"px",overflow:"hidden",userSelect:"none",display:"flex",alignItems:"center",justifyContent:"center"}},e("kritzel-icon",{name:"error"===i.loadState?"image-off":"image",size:Math.max(16,.3*Math.min(i.totalWidth,i.totalHeight)),style:{color:a.resolveThemeColor({light:"#9ca3af",dark:"#6b7280"},t)}})),G.isInstanceOf(i,"KritzelCustomElement")&&e("div",{ref:t=>t&&i.mount(t),style:{position:"absolute",left:"0",top:"0",width:i.totalWidth+"px",height:i.totalHeight+"px",transform:0!==i.rotationDegrees?`rotate(${i.rotationDegrees}deg)`:void 0,transformOrigin:0!==i.rotationDegrees?`${i.totalWidth/2}px ${i.totalHeight/2}px`:void 0,opacity:i.markedForRemoval?"0.5":i.opacity.toString(),pointerEvents:i.markedForRemoval?"none":"auto",backgroundColor:a.resolveThemeColor(i.backgroundColor,t),borderColor:a.resolveThemeColor(i.borderColor,t),borderWidth:i.borderWidth+"px",borderStyle:"solid",padding:i.padding+"px",overflow:"hidden",display:"block"}}),G.isInstanceOf(i,"KritzelSelectionGroup")&&!this.core.displaySelectionLineUI(i)&&e("div",{ref:t=>t&&i.mount(t),style:{position:"absolute",left:"0",top:"0",width:i.totalWidth+"px",height:i.totalHeight+"px",transform:0!==i.rotationDegrees?`rotate(${i.rotationDegrees}deg)`:void 0,transformOrigin:0!==i.rotationDegrees?`${i.totalWidth/2}px ${i.totalHeight/2}px`:void 0,opacity:i.markedForRemoval?"0.5":i.opacity.toString(),pointerEvents:i.markedForRemoval?"none":"auto"}}),G.isInstanceOf(i,"KritzelSelectionBox")&&e("div",{ref:t=>t&&i.mount(t),style:{position:"absolute",left:"0",top:"0",width:i.totalWidth+"px",height:i.totalHeight+"px",transform:0!==i.rotationDegrees?`rotate(${i.rotationDegrees}deg)`:void 0,transformOrigin:0!==i.rotationDegrees?`${i.totalWidth/2}px ${i.totalHeight/2}px`:void 0,opacity:i.markedForRemoval?"0.5":i.opacity.toString(),pointerEvents:i.markedForRemoval?"none":"auto",backgroundColor:a.resolveThemeColor(i.backgroundColor,t),borderColor:a.resolveThemeColor(i.borderColor,t),borderWidth:i.borderWidth+"px",borderStyle:"solid"}}),G.isInstanceOf(i,"KritzelText")&&e("div",{style:{position:"absolute",left:"0",top:"0",width:i.totalWidth+"px",height:i.totalHeight+"px",transform:0!==i.rotationDegrees?`rotate(${i.rotationDegrees}deg)`:void 0,transformOrigin:0!==i.rotationDegrees?`${i.totalWidth/2}px ${i.totalHeight/2}px`:void 0,opacity:i.markedForRemoval?"0.5":i.opacity.toString(),pointerEvents:i.markedForRemoval?"none":"auto"}},e("div",{id:"text-object",ref:t=>t&&i.mount(t),onPointerDown:t=>i.handlePointerDown(t),onPointerMove:t=>i.handlePointerMove(t),onPointerUp:t=>i.handlePointerUp(t),style:{minWidth:i.initialWidth+"px",minHeight:i.initialHeight+"px",maxWidth:"500px",height:"auto",width:"max-content",transformOrigin:"top left",transform:`scale(${i.scaleFactor})`,backgroundColor:a.resolveThemeColor(i.backgroundColor,t),overflow:"visible"}})),G.isInstanceOf(i,"KritzelShape")&&e("div",{ref:t=>t&&i.mount(t),onPointerDown:t=>i.handlePointerDown(t),onPointerMove:t=>i.handlePointerMove(t),onPointerUp:t=>i.handlePointerUp(t),style:{position:"absolute",left:"0",top:"0",width:i.totalWidth+"px",height:i.totalHeight+"px",transform:0!==i.rotationDegrees?`rotate(${i.rotationDegrees}deg)`:void 0,transformOrigin:0!==i.rotationDegrees?`${i.totalWidth/2}px ${i.totalHeight/2}px`:void 0,opacity:i.markedForRemoval?"0.5":i.opacity.toString(),pointerEvents:i.markedForRemoval?"none":"auto",overflow:"visible"}},e("svg",{xmlns:"http://www.w3.org/2000/svg",style:{position:"absolute",top:"0",left:"0",width:"100%",height:"100%",overflow:"visible",pointerEvents:"none"},viewBox:i.viewBox,preserveAspectRatio:"none"},e("path",{d:i.getSvgPath(),fill:a.resolveThemeColor(i.fillColor,t),stroke:a.resolveThemeColor(i.strokeColor,t),"stroke-width":i.strokeWidth})),e("div",{ref:t=>t&&i.mountTextEditor(t),style:{position:"absolute",top:"0",left:"0",width:"100%",height:"100%",display:"flex",alignItems:"center",justifyContent:"center",textAlign:"center",overflow:"hidden",pointerEvents:i.isEditing?"auto":"none"}})),this.core.store.state.debugInfo.showObjectInfo&&i.isDebugInfoVisible&&e("div",{style:{pointerEvents:"none",position:"absolute",left:`${i.totalWidth}px`,top:"0",zIndex:(i.zIndex+2).toString()}},e("div",{style:{whiteSpace:"nowrap",fontSize:"10px"}},"Id: ",i.id),e("div",{style:{whiteSpace:"nowrap",fontSize:"10px"}},"userId: ",i.userId),e("div",{style:{whiteSpace:"nowrap",fontSize:"10px"}},"width: ",i.width),e("div",{style:{whiteSpace:"nowrap",fontSize:"10px"}},"height: ",i.height),e("div",{style:{whiteSpace:"nowrap",fontSize:"10px"}},"translateX: ",i.translateX),e("div",{style:{whiteSpace:"nowrap",fontSize:"10px"}},"translateY: ",i.translateY),e("div",{style:{whiteSpace:"nowrap",fontSize:"10px"}},"rotationDegrees: ",i.rotationDegrees),e("div",{style:{whiteSpace:"nowrap",fontSize:"10px"}},"zIndex: ",i.zIndex),G.isInstanceOf(i,"KritzelImage")&&e("div",null,e("div",{style:{whiteSpace:"nowrap",fontSize:"10px"}},"assetId: ",i.assetId),e("div",{style:{whiteSpace:"nowrap",fontSize:"10px"}},"mimeType: ",i.mimeType))),(this.core.displaySelectionGroupUI(i)||this.core.displaySelectionLineUI(i))&&(()=>{const r=G.isInstanceOf(i,"KritzelSelectionGroup"),s=this.core.store.objects?.localClientId,l=this.core.store.objects?.awareness?.getStates(),c=r&&(null!=i.userId&&null!=this.core.user?.id&&i.userId!==this.core.user.id||null!=i.userId&&null!=this.core.user?.id&&i.userId===this.core.user.id&&null!=i.clientId&&null!=s&&i.clientId!==s&&!0===l?.has(i.clientId));let h;if(c&&l&&(r&&null!=i.clientId&&(h=l.get(i.clientId)?.user?.color),!h))for(const t of l.values())if(t.user?.id===i.userId){h=t.user.color;break}const u=h??(a.resolveThemeColor(i.borderColor,t)||"var(--kritzel-selection-border-color, #007AFF)"),d=h??"var(--kritzel-selection-handle-stroke-color, #007AFF)";return e("svg",{xmlns:"http://www.w3.org/2000/svg",style:{zIndex:(i.zIndex+1).toString(),height:i?.totalHeight.toString(),width:i?.totalWidth.toString(),left:"0",top:"0",position:"absolute",transform:`rotate(${i.rotationDegrees}deg)`,transformOrigin:`${i.totalWidth/2}px ${i.totalHeight/2}px`,overflow:"visible",pointerEvents:"none"}},this.core.displaySelectionGroupUI(i)&&e("g",{class:"selection-group-ui",style:{pointerEvents:"none"}},(()=>{const t=c&&G.isInstanceOf(i,"KritzelSelectionGroup")&&1===i.objects.length&&G.isInstanceOf(i.objects[0],"KritzelLine")?i.objects[0]:null;return t?e("g",{class:"selection-line-borders"},e("path",{class:"selection-line-border",d:this.core.anchorManager.computeClippedLinePath(t,!0),style:{stroke:u,strokeWidth:`calc(var(--kritzel-selection-border-width, 2px) * ${i.scale} / ${this.core.store.state?.scale})`,strokeLinecap:"round",fill:"none"}})):e("g",{class:"selection-group-borders"},e("line",{x1:"0",y1:"0",x2:i.totalWidth,y2:"0",style:{stroke:u,strokeWidth:`calc(var(--kritzel-selection-border-width, 2px) * ${i.scale} / ${this.core.store.state?.scale})`,strokeLinecap:"square"}}),e("line",{x1:"0",y1:"0",x2:"0",y2:i.totalHeight,style:{stroke:u,strokeWidth:`calc(var(--kritzel-selection-border-width, 2px) * ${i.scale} / ${this.core.store.state?.scale})`,strokeLinecap:"square"}}),e("line",{x1:"0",y1:i.totalHeight,x2:i.totalWidth,y2:i.totalHeight,style:{stroke:u,strokeWidth:`calc(var(--kritzel-selection-border-width, 2px) * ${i.scale} / ${this.core.store.state?.scale})`,strokeLinecap:"square"}}),e("line",{x1:i.totalWidth,y1:"0",x2:i.totalWidth,y2:i.totalHeight,style:{stroke:u,strokeWidth:`calc(var(--kritzel-selection-border-width, 2px) * ${i.scale} / ${this.core.store.state?.scale})`,strokeLinecap:"square"}}))})(),!this.isSelecting&&!c&&e("g",{class:"selection-group-handles",style:{pointerEvents:"auto"}},e("rect",{class:"resize-handle top-left",x:""+-(n-1)*i.scale/this.core.store.state?.scale,y:""+-(n-1)*i.scale/this.core.store.state?.scale,width:""+2*(n-1)*i.scale/this.core.store.state?.scale,height:""+2*(n-1)*i.scale/this.core.store.state?.scale,style:{fill:"var(--kritzel-selection-handle-color, #ffffff)",stroke:d,strokeWidth:`calc(2px * ${i.scale} / ${this.core.store.state?.scale})`,paintOrder:"fill"}}),e("rect",{class:"resize-handle-overlay top-left",x:""+-o*i.scale/this.core.store.state?.scale,y:""+-o*i.scale/this.core.store.state?.scale,width:""+2*o*i.scale/this.core.store.state?.scale,height:""+2*o*i.scale/this.core.store.state?.scale,style:{fill:"transparent",paintOrder:"fill"}}),e("rect",{class:"resize-handle top-right",x:""+(i.totalWidth-(n-1)*i.scale/this.core.store.state?.scale),y:""+-(n-1)*i.scale/this.core.store.state?.scale,width:""+2*(n-1)*i.scale/this.core.store.state?.scale,height:""+2*(n-1)*i.scale/this.core.store.state?.scale,style:{fill:"var(--kritzel-selection-handle-color, #ffffff)",stroke:d,strokeWidth:`calc(2px * ${i.scale} / ${this.core.store.state?.scale})`,paintOrder:"fill"}}),e("rect",{class:"resize-handle-overlay top-right",x:""+(i.totalWidth-o*i.scale/this.core.store.state?.scale),y:""+-o*i.scale/this.core.store.state?.scale,width:""+2*o*i.scale/this.core.store.state?.scale,height:""+2*o*i.scale/this.core.store.state?.scale,style:{fill:"transparent",paintOrder:"fill"}}),e("rect",{class:"resize-handle bottom-left",x:""+-(n-1)*i.scale/this.core.store.state?.scale,y:""+(i.totalHeight-(n-1)*i.scale/this.core.store.state?.scale),width:""+2*(n-1)*i.scale/this.core.store.state?.scale,height:""+2*(n-1)*i.scale/this.core.store.state?.scale,style:{fill:"var(--kritzel-selection-handle-color, #ffffff)",stroke:d,strokeWidth:`calc(2px * ${i.scale} / ${this.core.store.state?.scale})`,paintOrder:"fill"}}),e("rect",{class:"resize-handle-overlay bottom-left",x:""+-o*i.scale/this.core.store.state?.scale,y:""+(i.totalHeight-o*i.scale/this.core.store.state?.scale),width:""+2*o*i.scale/this.core.store.state?.scale,height:""+2*o*i.scale/this.core.store.state?.scale,style:{fill:"transparent",paintOrder:"fill"}}),e("rect",{class:"resize-handle bottom-right",x:""+(i.totalWidth-(n-1)*i.scale/this.core.store.state?.scale),y:""+(i.totalHeight-(n-1)*i.scale/this.core.store.state?.scale),width:""+2*(n-1)*i.scale/this.core.store.state?.scale,height:""+2*(n-1)*i.scale/this.core.store.state?.scale,style:{fill:"var(--kritzel-selection-handle-color, #ffffff)",stroke:d,strokeWidth:`calc(2px * ${i.scale} / ${this.core.store.state?.scale})`,paintOrder:"fill"}}),e("rect",{class:"resize-handle-overlay bottom-right",x:""+(i.totalWidth-o*i.scale/this.core.store.state?.scale),y:""+(i.totalHeight-o*i.scale/this.core.store.state?.scale),width:""+2*o*i.scale/this.core.store.state?.scale,height:""+2*o*i.scale/this.core.store.state?.scale,style:{fill:"transparent",paintOrder:"fill"}}),e("line",{x1:i.totalWidth/2,y1:"0",x2:i.totalWidth/2,y2:-15*i.scale/this.core.store.state?.scale,style:{stroke:u,strokeWidth:`calc(var(--kritzel-selection-border-width, 2px) * ${i.scale} / ${this.core.store.state?.scale})`}}),e("circle",{class:"rotation-handle",cx:i.totalWidth/2,cy:-15*i.scale/this.core.store.state?.scale,r:""+(n-1)*i.scale/this.core.store.state?.scale,style:{fill:"var(--kritzel-selection-handle-color, #ffffff)",stroke:d,strokeWidth:`calc(2px * ${i.scale} / ${this.core.store.state?.scale})`,paintOrder:"fill"}}),e("circle",{class:"rotation-handle-overlay",cx:i.totalWidth/2,cy:-15*i.scale/this.core.store.state?.scale,r:""+o*i.scale/this.core.store.state?.scale,style:{fill:"transparent",paintOrder:"fill"}}))),this.core.displaySelectionLineUI(i)&&G.isInstanceOf(i,"KritzelLine")&&e("g",{class:"selection-line-ui",style:{pointerEvents:"none"}},e("g",{class:"selection-line-borders"},e("path",{class:"selection-line-border",d:this.core.anchorManager.computeClippedLinePath(i,!0),style:{stroke:u,strokeWidth:`calc(var(--kritzel-selection-border-width, 2px) * ${i.scale} / ${this.core.store.state?.scale})`,strokeLinecap:"round",fill:"none"}})),!this.isSelecting&&!c&&e("g",{class:"selection-line-handles",style:{pointerEvents:"auto"}},e("circle",{class:"selection-line-handle start",cx:i.startX-i.x,cy:i.startY-i.y,r:""+(n-1)*i.scale/this.core.store.state?.scale,style:{fill:"var(--kritzel-selection-handle-color, #000000)",stroke:d,strokeWidth:`calc(2px * ${i.scale} / ${this.core.store.state?.scale})`,paintOrder:"fill"}}),e("circle",{class:"selection-line-handle-overlay start","data-testid":"line-handle-start",cx:i.startX-i.x,cy:i.startY-i.y,r:""+o*i.scale/this.core.store.state?.scale,style:{fill:"transparent",paintOrder:"fill"}}),e("circle",{class:"selection-line-handle center",cx:void 0!==i.controlX?(i.startX+2*i.controlX+i.endX)/4-i.x:(i.startX-i.x+i.endX-i.x)/2,cy:void 0!==i.controlY?(i.startY+2*i.controlY+i.endY)/4-i.y:(i.startY-i.y+i.endY-i.y)/2,r:""+(n-1)*i.scale/this.core.store.state?.scale,style:{fill:"var(--kritzel-selection-handle-color, #000000)",stroke:d,strokeWidth:`calc(2px * ${i.scale} / ${this.core.store.state?.scale})`,paintOrder:"fill"}}),e("circle",{class:"selection-line-handle-overlay center","data-testid":"line-handle-center",cx:void 0!==i.controlX?(i.startX+2*i.controlX+i.endX)/4-i.x:(i.startX-i.x+i.endX-i.x)/2,cy:void 0!==i.controlY?(i.startY+2*i.controlY+i.endY)/4-i.y:(i.startY-i.y+i.endY-i.y)/2,r:""+o*i.scale/this.core.store.state?.scale,style:{fill:"transparent",paintOrder:"fill"}}),e("circle",{class:"selection-line-handle end",cx:i.endX-i.x,cy:i.endY-i.y,r:""+(n-1)*i.scale/this.core.store.state?.scale,style:{fill:"var(--kritzel-selection-handle-color, #000000)",stroke:d,strokeWidth:`calc(2px * ${i.scale} / ${this.core.store.state?.scale})`,paintOrder:"fill"}}),e("circle",{class:"selection-line-handle-overlay end","data-testid":"line-handle-end",cx:i.endX-i.x,cy:i.endY-i.y,r:""+o*i.scale/this.core.store.state?.scale,style:{fill:"transparent",paintOrder:"fill"}}))))})()))),(()=>{const t=this.core.anchorManager.getAnchorLinesRenderData();return t?e("svg",{xmlns:"http://www.w3.org/2000/svg",class:"anchor-lines",style:{position:"absolute",left:"0",top:"0",width:"1px",height:"1px",pointerEvents:"none",zIndex:"9998",overflow:"visible"}},t.startAnchorViz&&e("g",{class:"anchor-line-start"},t.startAnchorViz.pathD?e("path",{d:t.startAnchorViz.pathD,style:{stroke:"var(--kritzel-snap-line-stroke, rgba(0, 0, 0, 0.3))",strokeWidth:`${t.lineStrokeWidth}`,strokeDasharray:t.dashArray,strokeLinecap:"round",fill:"none"}}):e("line",{x1:t.startAnchorViz.edgeX,y1:t.startAnchorViz.edgeY,x2:t.startAnchorViz.centerX,y2:t.startAnchorViz.centerY,style:{stroke:"var(--kritzel-snap-line-stroke, rgba(0, 0, 0, 0.3))",strokeWidth:`${t.lineStrokeWidth}`,strokeDasharray:t.dashArray,strokeLinecap:"round"}}),e("circle",{cx:t.startAnchorViz.centerX,cy:t.startAnchorViz.centerY,r:t.indicatorRadius,style:{fill:"var(--kritzel-snap-indicator-fill, rgba(0, 0, 0))",stroke:"var(--kritzel-snap-indicator-stroke, #007bff)",strokeWidth:t.indicatorStrokeWidth}})),t.endAnchorViz&&e("g",{class:"anchor-line-end"},t.endAnchorViz.pathD?e("path",{d:t.endAnchorViz.pathD,style:{stroke:"var(--kritzel-snap-line-stroke, rgba(0, 0, 0, 0.2))",strokeWidth:`${t.lineStrokeWidth}`,strokeDasharray:t.dashArray,strokeLinecap:"round",fill:"none"}}):e("line",{x1:t.endAnchorViz.edgeX,y1:t.endAnchorViz.edgeY,x2:t.endAnchorViz.centerX,y2:t.endAnchorViz.centerY,style:{stroke:"var(--kritzel-snap-line-stroke, rgba(0, 0, 0, 0.2))",strokeWidth:`${t.lineStrokeWidth}`,strokeDasharray:t.dashArray,strokeLinecap:"round"}}),e("circle",{cx:t.endAnchorViz.centerX,cy:t.endAnchorViz.centerY,r:t.indicatorRadius,style:{fill:"var(--kritzel-snap-indicator-fill, rgba(59, 130, 246, 0.3))",stroke:"var(--kritzel-snap-indicator-stroke, #007bff)",strokeWidth:t.indicatorStrokeWidth}}))):null})(),(()=>{const t=this.core.anchorManager.getSnapIndicatorRenderData();return t?e("svg",{xmlns:"http://www.w3.org/2000/svg",class:"snap-indicator",style:{position:"absolute",left:"0",top:"0",width:"1px",height:"1px",pointerEvents:"none",zIndex:"9999",overflow:"visible"}},e("g",null,t.snapLinePath?e("path",{d:t.snapLinePath,fill:"none",style:{stroke:"var(--kritzel-snap-line-stroke, rgba(0, 0, 0, 0.2))",strokeWidth:t.lineStrokeWidth,strokeDasharray:t.dashArray,strokeLinecap:"round"}}):void 0!==t.edgeX&&void 0!==t.edgeY&&e("line",{x1:t.edgeX,y1:t.edgeY,x2:t.centerX,y2:t.centerY,style:{stroke:"var(--kritzel-snap-line-stroke, rgba(0, 0, 0, 0.2))",strokeWidth:t.lineStrokeWidth,strokeDasharray:t.dashArray,strokeLinecap:"round"}}),e("circle",{cx:t.centerX,cy:t.centerY,r:t.indicatorRadius,style:{fill:"var(--kritzel-snap-indicator-fill, rgba(59, 130, 246, 0.3))",stroke:"var(--kritzel-snap-indicator-stroke, #007bff)",strokeWidth:t.indicatorStrokeWidth}}))):null})()),this.core.store.state.isContextMenuVisible&&e("kritzel-context-menu",{class:"context-menu",ref:t=>this.contextMenuElement=t??null,items:this.core.store.state.contextMenuItems,objects:this.core.store.selectionGroup?.objects||[],style:{position:"fixed",left:`${this.core.store.state.contextMenuX}px`,top:`${this.core.store.state.contextMenuY}px`,zIndex:"10002"},onActionSelected:t=>{t.detail.action&&t.detail.action({x:(-this.core.store.state.translateX+this.core.store.state.contextMenuX)/this.core.store.state.scale,y:(-this.core.store.state.translateY+this.core.store.state.contextMenuY)/this.core.store.state.scale},this.core.store.selectionGroup?.objects||[]),this.hideContextMenu()},onClose:()=>this.hideContextMenu()}),this.core.store.objects?.hasAwareness&&e("kritzel-awareness-cursors",{core:this.core}),this.core.store.state?.activeTool instanceof m&&!this.core.store.state.isScaling&&e("kritzel-cursor-trail",{core:this.core}))}static get watchers(){return{workspace:[{onWorkspaceChange:0}],activeWorkspaceId:[{onActiveWorkspaceIdChange:0}],syncConfig:[{onSyncConfigChange:0}],assetStorageConfig:[{onAssetStorageConfigChange:0}],user:[{onUserChange:0}],scaleMax:[{validateScaleMax:0}],scaleMin:[{validateScaleMin:0}],cursorTarget:[{onCursorTargetChange:0}],lockDrawingScale:[{onLockDrawingScaleChange:0}],theme:[{onThemeChange:0}],viewportBoundaryLeft:[{onViewportBoundaryLeftChange:0}],viewportBoundaryRight:[{onViewportBoundaryRightChange:0}],viewportBoundaryTop:[{onViewportBoundaryTopChange:0}],viewportBoundaryBottom:[{onViewportBoundaryBottomChange:0}],debugInfo:[{onDebugInfoChange:0}],isLoading:[{onIsLoadingChange:0}]}}};ye.style=":host{display:block;position:relative;height:100%;width:100%;overflow:hidden;background-color:var(--kritzel-engine-background-color, #ffffff)}:host,:host *{touch-action:none;user-select:none}.ProseMirror{outline:none}p,h1,h2,h3,h4,h5,h6,blockquote,pre{margin:0;padding:0}.workspace-loading-overlay{position:absolute;inset:0;z-index:9999;display:flex;align-items:center;justify-content:center;gap:10px;background-color:var(--kritzel-loading-overlay-background, rgba(255, 255, 255, 0.6));color:var(--kritzel-loading-overlay-color, #333);font-family:var(--kritzel-font-family, sans-serif);font-size:1.25rem;pointer-events:all;animation:workspace-loading-fade-in 200ms ease-out var(--kritzel-loading-overlay-delay, 300ms) forwards;opacity:0}.workspace-loading-spinner{width:20px;height:20px;box-sizing:border-box;display:block;flex-shrink:0;border:2px solid var(--kritzel-loading-overlay-spinner-color, #cccccc);border-top-color:var(--kritzel-loading-overlay-spinner-active-color, #333333);border-radius:50%;animation:workspace-loading-spin 0.6s linear infinite}@keyframes workspace-loading-spin{to{transform:rotate(360deg)}}@keyframes workspace-loading-fade-in{to{opacity:1}}.debug-panel{position:absolute;pointer-events:none;top:0;right:0}.origin{position:relative;top:0;left:0;height:0;width:0;pointer-events:none;-webkit-transform-origin:top left;-moz-transform-origin:top left;transform-origin:top left;overflow:visible}.object{overflow:visible}.PlaygroundEditorTheme__quote{margin:0;margin-left:20px;margin-bottom:10px;font-size:15px;color:rgb(101, 103, 107);border-left-color:rgb(206, 208, 212);border-left-width:4px;border-left-style:solid;padding-left:16px}";const we=class{constructor(e){t(this,e),this.exportPng=r(this,"exportPng"),this.exportSvg=r(this,"exportSvg"),this.exportJson=r(this,"exportJson")}workspaceName="workspace";isDialogOpen=!1;previewUrl;isLoading=!1;activeTab="viewport";exportFilename="";viewportExportFormat="png";exportPng;exportSvg;exportJson;tabs=[{id:"viewport",label:"Export Viewport"},{id:"workspace",label:"Export Workspace"}];viewportFormatOptions=[{value:"png",label:"PNG"},{value:"svg",label:"SVG"}];async open(t){this.previewUrl=t,this.activeTab="viewport",this.viewportExportFormat="png",this.exportFilename=this.generateDefaultFilename(),this.isDialogOpen=!0}generateDefaultFilename(){const t=(new Date).toISOString().replace(/[:.]/g,"-").slice(0,-5);return`${this.workspaceName}-${t}`}handleFilenameChange=t=>{this.exportFilename=t.detail};closeDialog=()=>{this.isDialogOpen=!1};handleTabChange=t=>{this.activeTab=t.detail};handleViewportFormatChange=t=>{this.viewportExportFormat=t.detail};handleExport=()=>{"viewport"===this.activeTab?"png"===this.viewportExportFormat?this.exportPng.emit():this.exportSvg.emit():this.exportJson.emit(this.exportFilename||this.generateDefaultFilename()),this.closeDialog()};renderViewportExport(){return e("div",{class:"export-tab-content"},this.previewUrl&&e("div",{class:"preview-container"},e("img",{src:this.previewUrl,alt:"Viewport Preview"})),e("kritzel-input",{label:"Filename",value:this.exportFilename,placeholder:"Enter filename",suffix:`.${this.viewportExportFormat}`,onValueChange:this.handleFilenameChange}),e("div",{class:"format-selection"},e("label",null,"Format"),e("kritzel-dropdown",{options:this.viewportFormatOptions,value:this.viewportExportFormat,forceOpenDirection:"up",onValueChanged:this.handleViewportFormatChange})))}renderWorkspaceExport(){return e("div",{class:"export-tab-content"},e("kritzel-input",{label:"Filename",value:this.exportFilename,placeholder:"Enter filename",suffix:".json",onValueChange:this.handleFilenameChange}))}render(){return e(i,{key:"efeea781325e672e3f4c1579a50da1c928dc88b5"},e("kritzel-dialog",{key:"c5e60559a3022eec7d13a73b5ec858edb8e7ce1d",isOpen:this.isDialogOpen,dialogTitle:"Export",closable:!0,onDialogClose:this.closeDialog},e("div",{key:"1508001914a22cbb944502be7d33a04128548842",class:"export-content"},e("kritzel-pill-tabs",{key:"9b0a21140fef986344d98b688729017cb66da493",tabs:this.tabs,value:this.activeTab,onValueChange:this.handleTabChange}),"viewport"===this.activeTab&&this.renderViewportExport(),"workspace"===this.activeTab&&this.renderWorkspaceExport(),e("button",{key:"70021cadab8b2840bbcf66afcd38c28c419facfe",class:"export-primary-button",onClick:this.handleExport},"Export"))))}};we.style=":host{display:flex;flex-direction:column;min-height:0}.export-content{display:flex;flex-direction:column;gap:16px;padding:0;flex:1}.export-content kritzel-pill-tabs{align-self:center}.export-tab-content{display:flex;flex-direction:column;gap:16px;min-height:330px}.format-selection{display:flex;flex-direction:column;gap:6px}.format-selection label{font-size:14px;font-weight:500;color:var(--kritzel-global-text-primary, #333)}.export-primary-button{width:100%;padding:12px 24px;background-color:var(--kritzel-global-primary-color, #007AFF);color:var(--kritzel-global-primary-text-color, #fff);border:none;border-radius:8px;font-size:14px;font-weight:600;cursor:pointer;transition:background-color 0.2s ease;-webkit-tap-highlight-color:transparent}.export-primary-button:hover{background-color:var(--kritzel-global-primary-hover-color, #0066d6)}.export-primary-button:focus-visible{outline:revert;outline-offset:revert}.preview-container{width:100%;display:flex;justify-content:center;align-items:center;box-sizing:border-box;margin-bottom:8px}.preview-container img{max-width:100%;max-height:250px;object-fit:contain;box-shadow:0 4px 8px rgba(0, 0, 0, 0.15);border-radius:4px;border:1px solid var(--kritzel-global-border-color, #dbdbdb)}.export-content p{margin:0;color:var(--kritzel-global-text-secondary, #666)}@media (max-width: 576px){.export-tab-content{flex:1;min-height:0}}";const xe=class{constructor(e){t(this,e)}fontFamily="Arial, sans-serif";size=24;color="#000000";render(){return e(i,{key:"bcff1827a61df6896e49fe1df4819bf27b3610ef"},e("div",{key:"53a03532afde5fca6e8ec1cc78e6cd41ab1444cd",class:"font-preview",style:{fontFamily:this.fontFamily,fontSize:`${this.size}px`,color:this.color}},"A"))}};xe.style=":host{display:block}.font-preview{color:var(--kritzel-font-size-text-color, #333333);line-height:1;text-align:center;font-weight:bold}";const ze=class{constructor(e){t(this,e),this.fontFamilyChange=r(this,"fontFamilyChange")}fontOptions=[{value:"arial",label:"Arial"},{value:"verdana",label:"Verdana"},{value:"helvetica",label:"Helvetica"},{value:"tahoma",label:"Tahoma"},{value:"trebuchet ms",label:"Trebuchet MS"},{value:"times new roman",label:"Times New Roman"},{value:"georgia",label:"Georgia"},{value:"garamond",label:"Garamond"},{value:"courier new",label:"Courier New"},{value:"brush script mt",label:"Brush Script MT"}];selectedFontFamily;fontFamilyChange;componentWillLoad(){if(this.fontOptions&&this.fontOptions.length>0){const t=this.fontOptions.some((t=>t.value===this.selectedFontFamily));this.selectedFontFamily&&t||(this.selectedFontFamily=this.fontOptions[0].value)}}handleDropdownValueChange=t=>{this.fontFamilyChange.emit(t.detail)};render(){const t=this.fontOptions.map((t=>({value:t.value,label:t.label,style:{fontFamily:t.value}})));return e(i,{key:"3d942116fc1019f1b2982395a08b14a9b0081040"},e("kritzel-dropdown",{key:"a042505de2d9b27c6f77ed929496a3921c3170cd",options:t,value:this.selectedFontFamily,onValueChanged:this.handleDropdownValueChange,selectStyles:{fontFamily:this.selectedFontFamily}}))}};ze.style=":host{display:flex;align-items:flex-start;gap:8px;padding:0;box-sizing:border-box;width:100%}.font-style-button{display:flex;justify-content:center;align-items:center;width:42px;height:32px;padding:0;border:none;outline:none;background:none;cursor:var(--kritzel-global-pointer-cursor, pointer);border-radius:0;color:var(--control-text-color);font-weight:bold;-webkit-tap-highlight-color:transparent}.font-style-button:not(:last-child){border-right:1px solid #333333}.font-style-button:hover{background-color:var(--control-hover-bg)}.font-style-button:active{background-color:var(--control-active-bg)}.font-style-button.selected,.font-style-button.selected:hover,.font-style-button.selected:active{background-color:var(--control-selected-bg);color:var(--control-selected-color)}.font-style-button.italic-text{font-style:italic}";const Ce=class{constructor(e){t(this,e),this.sizeChange=r(this,"sizeChange")}sizes=[8,10,12,16,20,24];selectedSize=null;fontFamily="Arial";sizeChange;handleSizeClick(t){this.selectedSize=t,this.sizeChange.emit(t)}handleKeyDown(t,e){"Enter"!==t.key&&" "!==t.key||(t.preventDefault(),this.handleSizeClick(e))}render(){return e(i,{key:"c409d73ff06966fd3861a16c7de32d41db85c12a"},this.sizes.map((t=>e("div",{tabIndex:0,class:{"size-container":!0,selected:this.selectedSize===t},onClick:()=>this.handleSizeClick(t),onKeyDown:e=>this.handleKeyDown(e,t)},e("kritzel-font",{fontFamily:this.fontFamily,size:t,color:"var(--kritzel-global-text-primary)"})))))}};Ce.style=":host{display:flex;align-items:flex-start;gap:8px;padding:0;box-sizing:border-box}.size-container{display:flex;justify-content:center;align-items:center;width:32px;height:32px;border-radius:4px;cursor:var(--kritzel-global-pointer-cursor, pointer);border:2px solid transparent;box-sizing:border-box;border-radius:50%}.size-container:hover{background-color:var(--kritzel-font-size-hover-background-color, #ebebeb)}.size-container.selected{border-color:var(--kritzel-selection-border-color, #007AFF);background-color:var(--kritzel-font-size-selected-background-color, #e0e0e0)}";const Se=class{constructor(e){t(this,e)}name;label;size=24;render(){const t=$.get(this.name);return t?e(i,{style:{width:`${this.size}px`,height:`${this.size}px`}},e("span",{"aria-hidden":!this.label,role:this.label?"img":void 0,"aria-label":this.label,innerHTML:t})):(console.error(`[kritzel-icon] Icon "${this.name}" not found in registry.`),e("span",{class:"error-icon","aria-label":`Error: Icon ${this.name} not found`},"?"))}};Se.style=":host{display:inline-flex;justify-content:center;align-items:center;color:var(--kritzel-icon-color, inherited)}span{display:flex;align-items:center;width:100%;height:100%;}span>svg{width:100%;height:100%}";const Ie=class{constructor(e){t(this,e),this.valueChange=r(this,"valueChange")}value="";label="";placeholder="";suffix="";type="text";disabled=!1;valueChange;inputValue="";onValueChange(t){this.inputValue=t??""}componentWillLoad(){this.inputValue=this.value??""}handleInput=t=>{const e=t.target;this.inputValue=e.value,this.value=e.value,this.valueChange.emit(e.value)};render(){return e(i,{key:"e482edcbaf7cee8c35effbce0428c2b4dea84bd4"},e("div",{key:"a71f5e3eeba5e34470227ea3be4dd6731a94a52e",class:"input-container"},this.label&&e("label",{key:"757a32997f09558412952fe948fa234d1baecb3f",class:"input-label"},this.label),e("div",{key:"cfb13fe0041efdd9fe4a7bf2a098ff321b545b79",class:{"input-wrapper":!0,"has-suffix":!!this.suffix}},e("input",{key:"b8bf209f14f15f4ad8eb0cf1be1afb1bfc958f79",type:this.type,class:"text-input",value:this.inputValue,placeholder:this.placeholder,disabled:this.disabled,onInput:this.handleInput}),this.suffix&&e("span",{key:"b5d4444609ad93c10d86978a488252b673979c94",class:"input-suffix"},this.suffix))))}static get watchers(){return{value:[{onValueChange:0}]}}};Ie.style=":host{display:block}.input-container{display:flex;flex-direction:column;gap:6px}.input-label{font-size:14px;font-weight:500;color:var(--kritzel-text-input-label-color, #333333)}.input-wrapper{display:flex;align-items:center;border:1px solid var(--kritzel-text-input-border-color, #ebebeb);border-radius:6px;overflow:hidden;background:var(--kritzel-text-input-background, #ffffff);transition:border-color 150ms ease}.input-wrapper:hover:not(:focus-within){border-color:var(--kritzel-text-input-hover-border-color, #cccccc)}.input-wrapper:focus-within{border-color:var(--kritzel-text-input-focus-border-color, #007AFF);border-width:2px}.text-input{flex:1;padding:10px 12px;border:none;outline:none;font-size:14px;font-family:inherit;background:transparent;color:var(--kritzel-text-input-text-color, #333333);box-sizing:border-box}.text-input::placeholder{color:var(--kritzel-text-input-placeholder-color, #999999)}.text-input::selection{background-color:var(--kritzel-text-input-selection-background, #007AFF);color:var(--kritzel-text-input-selection-color, #ffffff)}.text-input:disabled{cursor:not-allowed;opacity:0.6}.input-suffix{padding:10px 12px;background:var(--kritzel-text-input-suffix-background, #f5f5f5);color:var(--kritzel-text-input-suffix-color, #666666);font-size:14px;border-left:1px solid var(--kritzel-text-input-border-color, #ebebeb);flex-shrink:0}";const $e=class{constructor(e){t(this,e),this.valueChange=r(this,"valueChange")}styles=["none","triangle"];value;valueChange;getStartEnding(){return this.value?.start?.enabled?this.value.start.style??"triangle":"none"}getEndEnding(){return this.value?.end?.enabled?this.value.end.style??"triangle":"none"}handleStartChange(t){const e={...this.value,start:"none"===t?{enabled:!1}:{enabled:!0,style:t}};this.value=e,this.valueChange.emit(e)}handleEndChange(t){const e={...this.value,end:"none"===t?{enabled:!1}:{enabled:!0,style:t}};this.value=e,this.valueChange.emit(e)}getEndingPath(t){switch(t){case"triangle":return"M 0 0 L 10 5 L 0 10 Z";case"open":return"M 0 0 L 10 5 L 0 10";case"diamond":return"M 0 5 L 5 0 L 10 5 L 5 10 Z";case"circle":return"M 10 5 A 5 5 0 1 1 0 5 A 5 5 0 1 1 10 5 Z";default:return""}}renderEndingIcon(t,i){const r="var(--kritzel-global-text-primary)";if("none"===t)return e("svg",{viewBox:"0 0 24 12",class:"ending-icon"},e("line",{x1:i?4:2,y1:"6",x2:i?22:20,y2:"6",stroke:r,"stroke-width":"2","stroke-linecap":"round"}));const n=this.getEndingPath(t),o="open"===t;return e("svg",{viewBox:"0 0 24 12",class:"ending-icon"},i?e("g",null,e("line",{x1:"12",y1:"6",x2:"22",y2:"6",stroke:r,"stroke-width":"2","stroke-linecap":"round"}),e("g",{transform:"translate(2, 1) scale(1, 1)"},e("path",{d:n,fill:o?"none":r,stroke:r,"stroke-width":o?2:0,"stroke-linecap":"round","stroke-linejoin":"round",transform:"scale(-1, 1) translate(-10, 0)"}))):e("g",null,e("line",{x1:"2",y1:"6",x2:"12",y2:"6",stroke:r,"stroke-width":"2","stroke-linecap":"round"}),e("g",{transform:"translate(12, 1)"},e("path",{d:n,fill:o?"none":r,stroke:r,"stroke-width":o?2:0,"stroke-linecap":"round","stroke-linejoin":"round"}))))}render(){const t=this.getStartEnding(),r=this.getEndEnding();return e(i,{key:"38bcd0b0e56c0d0fc7fd57346b718054faa0ba06"},e("div",{key:"5ae52039756334299a86d7301b15f6874d5689ff",class:"endings-section"},e("div",{key:"8a0dd7792498248203f2db8c346828fe7f57534d",class:"endings-row"},this.styles.map((i=>e("button",{class:{"ending-option":!0,selected:t===i},onClick:()=>this.handleStartChange(i),title:"none"===i?"No start arrow":`${i} start arrow`},this.renderEndingIcon(i,!0)))))),e("div",{key:"001c6cc50af45e1461ef15e2c43df4efdd83b48f",class:"endings-section"},e("div",{key:"96cc57da4bed38aa42207d40a6a21cd39fa18cad",class:"endings-row"},this.styles.map((t=>e("button",{class:{"ending-option":!0,selected:r===t},onClick:()=>this.handleEndChange(t),title:"none"===t?"No end arrow":`${t} end arrow`},this.renderEndingIcon(t,!1)))))))}};$e.style=":host{display:flex;flex-direction:column;gap:12px;padding:0;box-sizing:border-box}.endings-section{display:flex;flex-direction:column;gap:6px}.section-label{font-size:12px;font-weight:500;color:var(--kritzel-line-endings-label-color, #666666);padding-left:4px}.endings-row{display:flex;align-items:center;gap:4px}.ending-option{display:flex;justify-content:center;align-items:center;width:48px;height:32px;border-radius:6px;cursor:var(--kritzel-global-pointer-cursor, pointer);border:2px solid transparent;box-sizing:border-box;background:var(--kritzel-line-endings-option-background, #ffffff);padding:4px;transition:background-color 0.15s ease, border-color 0.15s ease}.ending-option:hover{background-color:var(--kritzel-line-endings-hover-background-color, #ebebeb)}.ending-option.selected{border-color:var(--kritzel-selection-border-color, #007AFF);background-color:var(--kritzel-line-endings-selected-background-color, #ebebeb)}.ending-option:focus{outline:none;box-shadow:0 0 0 2px var(--kritzel-global-focus-ring-color, rgba(0, 122, 255, 0.3))}.ending-icon{width:100%;height:100%}";const Me=class{constructor(e){t(this,e),this.providerLogin=r(this,"providerLogin"),this.dialogClosed=r(this,"dialogClosed")}get host(){return n(this)}providers=[];dialogTitle="Sign in";subtitle;isDialogOpen=!1;loadingProvider=null;providerLogin;dialogClosed;async open(){this.loadingProvider=null,this.isDialogOpen=!0}async close(){this.isDialogOpen=!1,this.loadingProvider=null}async setLoading(t){this.loadingProvider=t}handleProviderClick=t=>{this.loadingProvider||(this.loadingProvider=t.name,this.providerLogin.emit({provider:t.name}))};closeDialog=()=>{this.isDialogOpen=!1,this.loadingProvider=null,this.dialogClosed.emit()};render(){return e(i,{key:"8cac83db48fef2531f1669c3f601526b1e5cdefa"},e("kritzel-dialog",{key:"72e0f2eb8e19f3c1081bfd5e1183aa9ed1bc678a",dialogTitle:this.dialogTitle,isOpen:this.isDialogOpen,onDialogClose:this.closeDialog,size:"small"},e("div",{key:"bb17bcf6f3486000c9056b3983810e016b0f05a3",class:"login-content"},this.subtitle&&e("p",{key:"cef17bc6f5078769b8deed6ec1c615a71fe0c611",class:"login-subtitle"},this.subtitle),e("div",{key:"8462ef9a62201cb15f8911432ca188cf49bc8a8d",class:"login-providers"},this.providers.map((t=>e("button",{key:t.name,class:{"provider-button":!0,"is-loading":this.loadingProvider===t.name,"is-disabled":null!==this.loadingProvider&&this.loadingProvider!==t.name},disabled:null!==this.loadingProvider&&this.loadingProvider!==t.name,onClick:()=>this.handleProviderClick(t)},this.loadingProvider===t.name?e("span",{class:"spinner"}):t.icon&&e("kritzel-icon",{name:t.icon,size:20}),e("span",{class:"provider-label"},t.label))))))))}};Me.style=":host{display:contents}kritzel-dialog{--kritzel-dialog-width-small:380px}.login-content{display:flex;flex-direction:column;gap:20px}.login-subtitle{font-size:13px;color:var(--kritzel-login-dialog-subtitle-color, #666666);margin:0;line-height:1.5;text-align:center}.login-providers{display:flex;flex-direction:column;gap:10px}.provider-button{display:flex;align-items:center;justify-content:center;gap:10px;width:100%;padding:12px 16px;border:1px solid var(--kritzel-login-dialog-button-border-color, #e0e0e0);border-radius:8px;background:var(--kritzel-login-dialog-button-background, #ffffff);color:var(--kritzel-login-dialog-button-text-color, #333333);font-size:14px;font-weight:500;font-family:inherit;cursor:var(--kritzel-global-pointer-cursor, pointer);transition:background-color 0.15s ease, border-color 0.15s ease, opacity 0.15s ease;-webkit-tap-highlight-color:transparent}.provider-button:hover:not(:disabled){background:var(--kritzel-login-dialog-button-hover-background, #f5f5f5);border-color:var(--kritzel-login-dialog-button-hover-border-color, #cccccc)}.provider-button:active:not(:disabled){background:var(--kritzel-login-dialog-button-active-background, #ebebeb)}.provider-button:focus-visible{outline:revert;outline-offset:revert}.provider-button.is-disabled{opacity:0.5;cursor:default;pointer-events:none}.provider-button.is-loading{cursor:default}.provider-label{flex-shrink:0}.provider-button.is-loading .provider-label{opacity:0.7}@keyframes kritzel-login-spin{to{transform:rotate(360deg)}}.spinner{width:20px;height:20px;box-sizing:border-box;display:block;flex-shrink:0;border:2px solid var(--kritzel-login-dialog-spinner-color, #cccccc);border-top-color:var(--kritzel-login-dialog-spinner-active-color, #333333);border-radius:50%;animation:kritzel-login-spin 0.6s linear infinite}";const je=class{constructor(e){t(this,e),this.itemSelect=r(this,"itemSelect")}get host(){return n(this)}items=[];selectedItemId;itemSelect;focusedIndex=-1;showMobileDetail=!1;tabRefs=[];watchSelectedItemId(t,e){t!==e&&(this.showMobileDetail=!0)}componentWillRender(){this.tabRefs=[]}handleItemClick=t=>{t.disabled||(this.itemSelect.emit({item:t}),this.showMobileDetail=!0)};handleBackClick=()=>{this.showMobileDetail=!1};handleKeyDown=(t,e,i)=>{const r=this.items.map(((t,e)=>t.disabled?-1:e)).filter((t=>-1!==t)),n=r.indexOf(i);switch(t.key){case"ArrowDown":t.preventDefault(),this.focusTab(r[(n+1)%r.length]);break;case"ArrowUp":t.preventDefault(),this.focusTab(r[(n-1+r.length)%r.length]);break;case"Home":t.preventDefault(),this.focusTab(r[0]);break;case"End":t.preventDefault(),this.focusTab(r[r.length-1]);break;case"Enter":case" ":t.preventDefault(),this.handleItemClick(e)}};focusTab(t){this.focusedIndex=t;const e=this.tabRefs[t];e&&e.focus()}handleFocus=t=>{this.focusedIndex=t};handleBlur=()=>{this.focusedIndex=-1};setTabRef=(t,e)=>{t&&(this.tabRefs[e]=t)};getTabIndex(t,e){return t.disabled?-1:0}render(){const t=this.items.find((t=>t.id===this.selectedItemId)),r="master-detail-panel",n=t?`tab-${t.id}`:void 0;return e(i,{key:"7f1fd360f657fddcdb6ce2eea17e4e2daf426eb2"},e("div",{key:"02f7f6dd141d057dbf395dd836f7841a649fa16d",class:{"master-detail-container":!0,"is-mobile-detail-visible":this.showMobileDetail}},e("nav",{key:"397758627252c5e9573a61c457d4481df6d9b4f2",class:"master-menu",role:"tablist","aria-orientation":"vertical","aria-label":"Settings categories"},this.items.map(((t,i)=>e("button",{key:t.id,id:`tab-${t.id}`,ref:t=>this.setTabRef(t,i),class:{"menu-item":!0,"is-selected":t.id===this.selectedItemId,"is-disabled":!!t.disabled,"is-focused":i===this.focusedIndex},role:"tab","aria-selected":t.id===this.selectedItemId?"true":"false","aria-controls":r,"aria-disabled":t.disabled?"true":void 0,tabIndex:this.getTabIndex(t,i),disabled:t.disabled,onClick:()=>this.handleItemClick(t),onKeyDown:e=>this.handleKeyDown(e,t,i),onFocus:()=>this.handleFocus(i),onBlur:this.handleBlur},t.icon&&e("kritzel-icon",{name:t.icon,size:20,class:"menu-item-icon"}),e("span",{class:"menu-item-label"},t.label),e("span",{class:"menu-item-chevron","aria-hidden":"true"},e("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.5","stroke-linecap":"round","stroke-linejoin":"round"},e("path",{d:"m9 18 6-6-6-6"}))))))),e("div",{key:"65cc4601a39cb7780c52cc86075efd0b4a24646a",id:r,class:"detail-panel",role:"tabpanel","aria-labelledby":n},e("button",{key:"6b6ae9ac689c757d71e2a42ecaf8aaceb3785154",class:"mobile-back-button",onClick:this.handleBackClick,"aria-label":"Back to menu"},e("kritzel-icon",{key:"28d9b2f68030587d44505f691e8fed57d968e631",name:"chevron-left",size:20,class:"mobile-back-icon"}),"Back"),e("slot",{key:"2a35ca82717713808ca12227ecca671b848d1f02"}))))}static get watchers(){return{selectedItemId:[{watchSelectedItemId:0}]}}};je.style=":host{display:block;width:100%;height:100%}.master-detail-container{display:flex;width:100%;height:100%;min-height:var(--kritzel-master-detail-min-height, 300px);gap:var(--kritzel-master-detail-gap, 0);background-color:var(--kritzel-master-detail-background-color, transparent)}.master-menu{display:flex;flex-direction:column;width:var(--kritzel-master-detail-menu-width, 200px);min-width:var(--kritzel-master-detail-menu-min-width, 160px);padding:var(--kritzel-master-detail-menu-padding, 8px);background-color:var(--kritzel-master-detail-menu-background-color, #ffffff);border-right:var(--kritzel-master-detail-menu-border-right, 1px solid #ebebeb);gap:var(--kritzel-master-detail-menu-gap, 4px);overflow-y:auto}.menu-item{display:flex;align-items:center;gap:var(--kritzel-master-detail-menu-item-gap, 10px);padding:var(--kritzel-master-detail-menu-item-padding, 10px 12px);border:none;border-radius:var(--kritzel-master-detail-menu-item-border-radius, 6px);background-color:var(--kritzel-master-detail-menu-item-background-color, transparent);color:var(--kritzel-master-detail-menu-item-color, #333333);font-family:inherit;font-size:var(--kritzel-master-detail-menu-item-font-size, 14px);font-weight:var(--kritzel-master-detail-menu-item-font-weight, 400);text-align:left;cursor:var(--kritzel-global-pointer-cursor, pointer);transition:background-color 150ms ease, color 150ms ease;-webkit-tap-highlight-color:transparent}.menu-item:hover:not(.is-disabled){background-color:var(--kritzel-master-detail-menu-item-hover-background-color, #ebebeb)}.menu-item:active:not(.is-disabled){background-color:var(--kritzel-master-detail-menu-item-active-background-color, #e0e0e0)}.menu-item.is-selected{background-color:var(--kritzel-master-detail-menu-item-selected-background-color, #0066cc);color:var(--kritzel-master-detail-menu-item-selected-color, #ffffff);font-weight:var(--kritzel-master-detail-menu-item-selected-font-weight, 500)}.menu-item.is-selected:hover{background-color:var(--kritzel-master-detail-menu-item-selected-hover-background-color, #0052a3)}.menu-item.is-disabled{color:var(--kritzel-master-detail-menu-item-disabled-color, #999999);cursor:not-allowed;opacity:0.6}.menu-item:focus-visible{outline:var(--kritzel-master-detail-menu-item-focus-outline, revert);outline-offset:var(--kritzel-master-detail-menu-item-focus-outline-offset, revert)}.menu-item-icon{flex-shrink:0;display:flex;align-items:center;justify-content:center}.menu-item-label{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.detail-panel{flex:1;min-height:0;padding:var(--kritzel-master-detail-detail-padding, 16px);background-color:var(--kritzel-master-detail-detail-background-color, #ffffff);overflow-y:auto;-webkit-overflow-scrolling:touch;scrollbar-color:var(--kritzel-global-scrollbar-thumb-color, #ebebeb) transparent;scrollbar-width:thin}.detail-panel:focus{outline:none}.detail-panel:focus-visible{outline:var(--kritzel-master-detail-detail-focus-outline, revert);outline-offset:var(--kritzel-master-detail-detail-focus-outline-offset, revert)}.mobile-back-button{display:none;align-items:center;gap:8px;background:none;border:none;padding:0 0 16px 0;cursor:pointer;-webkit-tap-highlight-color:transparent;color:var(--kritzel-master-detail-back-button-color, #333333);font-weight:500;font-size:14px;font-family:inherit}.mobile-back-icon{display:flex;align-items:center;flex-shrink:0}.menu-item-chevron{display:none;flex-shrink:0;margin-left:auto;color:var(--kritzel-master-detail-menu-item-chevron-color, #999999)}.menu-item-chevron svg{width:16px;height:16px;stroke:currentColor}@media (max-width: 768px){.master-menu{width:100%;border-right:none}.detail-panel{display:none;width:100%}.master-detail-container.is-mobile-detail-visible .master-menu{display:none}.master-detail-container.is-mobile-detail-visible .detail-panel{display:block}.mobile-back-button{display:flex}.menu-item.is-selected{background-color:transparent;color:var(--kritzel-master-detail-menu-item-color, #333333);font-weight:var(--kritzel-master-detail-menu-item-font-weight, 400)}.menu-item.is-selected:hover{background-color:var(--kritzel-master-detail-menu-item-hover-background-color, #ebebeb)}.menu-item-chevron{display:flex;align-items:center}}";const Te=class{constructor(e){t(this,e),this.itemSelect=r(this,"itemSelect"),this.itemSave=r(this,"itemSave"),this.itemCancel=r(this,"itemCancel"),this.itemToggleChildMenu=r(this,"itemToggleChildMenu"),this.itemCloseChildMenu=r(this,"itemCloseChildMenu"),this.close=r(this,"close")}get host(){return n(this)}items;parent=null;itemSelect;itemSave;itemCancel;itemToggleChildMenu;itemCloseChildMenu;close;selectedIndex=null;async setScrollTop(t){this.host.scrollTop=t,this.host.scrollTo({top:t,behavior:"auto"})}async setFocus(){const t=this.host.shadowRoot.querySelector("kritzel-menu-item");t&&t.focus()}get openChildMenuItem(){return this.items.find((t=>t.isChildMenuOpen))}get editingMenuItem(){return this.items.find((t=>t.isEditing))}onOverlayClick=t=>{t.stopPropagation(),this.itemCloseChildMenu.emit(this.openChildMenuItem)};handleItemSelect=t=>{t.stopPropagation(),this.itemSelect.emit(t.detail)};handleSave=t=>{t.stopPropagation(),this.itemSave.emit(t.detail)};handleCancel=t=>{t.stopPropagation(),this.itemCancel.emit(t.detail)};handleToggleChildMenu=t=>{t.stopPropagation(),this.itemToggleChildMenu.emit(t.detail)};handleCloseChildMenu=t=>{t.stopPropagation(),this.itemCloseChildMenu.emit(t.detail)};render(){return e(i,{key:"a81ea8a1fe2dc6cb8d9f395cafbcadec3eb4aa45",tabIndex:0,onClick:t=>t.stopPropagation()},this.openChildMenuItem&&e("div",{key:"bb27d7a923431d79567e79283e505ea4ae02ef36",class:"has-open-child-overlay",onClick:this.onOverlayClick}),this.items.map((t=>e("kritzel-menu-item",{key:t.id,item:t,parent:this.parent,style:{pointerEvents:this.editingMenuItem&&!t.isEditing?"none":"auto"},onItemSelect:this.handleItemSelect,onItemSave:this.handleSave,onItemCancel:this.handleCancel,onItemToggleChildMenu:this.handleToggleChildMenu,onItemCloseChildMenu:this.handleCloseChildMenu}))))}};Te.style=":host{position:relative;display:flex;flex-direction:column;background-color:var(--kritzel-menu-background-color, #ffffff);width:var(--kritzel-menu-width, 200px);padding:var(--kritzel-menu-padding, 8px);border-radius:var(--kritzel-menu-border-radius, 12px);box-shadow:var(--kritzel-menu-box-shadow, 0 0 3px rgba(0, 0, 0, 0.08));border:var(--kritzel-menu-border, 1px solid #ebebeb);z-index:2;gap:var(--kritzel-menu-gap, 4px);overflow-y:auto;scrollbar-color:var(--kritzel-global-scrollbar-thumb-color, #ebebeb) transparent;scrollbar-width:thin;max-height:var(--kritzel-portal-max-height, 300px);box-sizing:border-box;-webkit-tap-highlight-color:transparent;outline:none;clip-path:inset(0 round var(--kritzel-menu-border-radius, 12px))}:host:focus-visible{outline:auto}.has-open-child-overlay{position:absolute;top:0;left:0;right:0;bottom:0;z-index:3}";const Ae=class{constructor(e){t(this,e),this.itemSelect=r(this,"itemSelect"),this.itemSave=r(this,"itemSave"),this.itemCancel=r(this,"itemCancel"),this.itemToggleChildMenu=r(this,"itemToggleChildMenu"),this.itemCloseChildMenu=r(this,"itemCloseChildMenu")}get host(){return n(this)}item;onItemChange(t,e){t!==e&&(this.isDirty=!1)}parent=null;itemSelect;itemSave;itemCancel;itemToggleChildMenu;itemCloseChildMenu;isDirty=!1;inputRef;focusInput(){this.item.isEditing&&!this.isDirty&&requestAnimationFrame((()=>{if(this.inputRef)if(this.inputRef.focus(),f.isIOS()){const t=this.inputRef.value.length;this.inputRef.setSelectionRange(t,t)}else this.inputRef.select()}))}componentDidLoad(){this.setDeviceSpecificStyles(),this.focusInput()}componentDidUpdate(){this.focusInput()}setDeviceSpecificStyles=()=>{f.isTouchDevice()&&(this.host.style.setProperty("--kritzel-menu-item-overlay-background-color","transparent"),this.host.style.setProperty("--kritzel-menu-item-button-hover-background-color","transparent"))};handleItemSelect=t=>{t.stopPropagation(),this.itemSelect.emit({item:this.item,parent:this.parent})};handleInputChange=t=>{t.stopPropagation(),this.item.label=t.target.value,this.isDirty=!0};handleSave=t=>{t.stopPropagation(),this.host.focus(),this.itemSave.emit(this.item)};handleCancel=t=>{t.stopPropagation(),this.host.focus(),this.itemCancel.emit(this.item)};handleMenuToggle=t=>{t.stopPropagation(),this.itemToggleChildMenu.emit({item:this.item,childMenuAnchor:t.target})};handleMenuClose=()=>{this.itemCloseChildMenu.emit(this.item)};renderViewMode(){return[e("div",{class:"menu-item-content left"},this.item.icon&&e("span",{title:this.item.iconTooltip},e("kritzel-icon",{name:this.item.icon,size:16,style:this.item.color?{"--kritzel-icon-color":this.item.color}:void 0})),e("div",{style:this.item.color?{color:this.item.color}:void 0},this.item.label)),e("div",{class:"menu-item-content right"},this.item.children&&this.item.children.length>0&&[e("button",{id:"child-menu-toggle",class:"action-button",onClick:this.handleMenuToggle,disabled:this.item.isDisabled},e("kritzel-icon",{name:"ellipsis-vertical",size:16})),e("kritzel-portal",{anchor:this.item.childMenuAnchor,offsetY:4,onClose:this.handleMenuClose},e("kritzel-menu",{items:this.item.children,parent:this.item,onItemSelect:t=>this.itemSelect.emit(t.detail),onItemSave:t=>this.itemSave.emit(t.detail),onItemCancel:t=>this.itemCancel.emit(t.detail),onClose:this.handleMenuClose}))])]}renderEditMode(){return[e("div",{class:"menu-item-content left"},e("input",{ref:t=>this.inputRef=t,type:"text",class:"edit-input",value:this.item.label,onInput:this.handleInputChange})),e("div",{class:"menu-item-content right"},e("div",{tabIndex:0,class:"action-button",onClick:this.handleCancel},e("kritzel-icon",{name:"x",size:16})),e("div",{tabIndex:this.isDirty||this.item.isNewItem?0:-1,class:{"action-button":!0,disabled:!this.isDirty&&!this.item.isNewItem},onClick:this.handleSave},e("kritzel-icon",{name:"check",size:16})))]}render(){return e(i,{key:"6fd639ff533e0b2c39febd369b4ba034661ec708",tabIndex:this.item.isDisabled?-1:0,class:{selected:this.item.isSelected,editing:this.item.isEditing,disabled:this.item.isDisabled,"child-open":this.item.isChildMenuOpen},onClick:this.handleItemSelect},e("div",{key:"d7486e9f1614be1801268fa97947aaab4c12460d",class:"menu-item-overlay"}),this.item.isEditing?this.renderEditMode():this.renderViewMode())}static get watchers(){return{item:[{onItemChange:0}]}}};Ae.style=":host{position:relative;display:flex;align-items:center;justify-content:space-between;width:100%;padding:var(--kritzel-menu-item-padding, 8px);box-sizing:border-box;gap:16px;height:var(--kritzel-menu-item-height, 40px);min-height:var(--kritzel-menu-item-min-height, 40px);font-family:sans-serif;font-size:var(--kritzel-menu-item-font-size, 14px);color:var(--kritzel-menu-item-color, #333333);border-radius:var(--kritzel-menu-item-border-radius, 12px);-webkit-tap-highlight-color:transparent}:host:focus:not(:focus-visible){outline:none}:host(:hover) .menu-item-overlay,:host(:focus-within) .menu-item-overlay{background-color:var(--kritzel-menu-item-overlay-background-color, hsl(0, 0%, 0%, 4.3%))}:host(.selected){background-color:var(--kritzel-menu-item-selected-background-color, #007aff);color:var(--kritzel-menu-item-selected-color, #ffffff)}:host(.selected) .action-button{color:var(--kritzel-menu-item-selected-color, #ffffff)}:host(.selected.editing){background-color:var(--kritzel-menu-item-selected-background-color, #007aff)}:host(.selected) .edit-input{color:var(--kritzel-menu-item-selected-color, #ffffff);caret-color:var(--kritzel-menu-item-input-caret-color-on-selected, #ffffff);border-color:var(--kritzel-menu-item-input-border-color-on-selected, #ffffff)}:host(.selected) .action-button kritzel-icon{--kritzel-icon-color:var(--kritzel-menu-item-selected-color, #ffffff)}kritzel-icon{--kritzel-icon-color:var(--kritzel-menu-item-color, #333333)}:host(.selected) kritzel-icon{--kritzel-icon-color:var(--kritzel-menu-item-selected-color, #ffffff)}:host(.selected) .edit-input::selection{background-color:var(--kritzel-menu-item-input-selection-color-on-selected, rgba(255, 255, 255, 0.3));color:var(--kritzel-menu-item-input-selection-text-color-on-selected, #ffffff)}:host(.editing){background-color:var(--kritzel-menu-item-editing-background-color, hsl(0, 0%, 0%, 4.3%))}:host(.disabled){opacity:0.5;pointer-events:none !important}:host(.child-open){background-color:var(--kritzel-menu-item-child-open-background-color, hsl(0, 0%, 0%, 4.3%))}:host(.child-open.selected){background-color:var(--kritzel-menu-item-selected-background-color, #007aff)}.menu-item-overlay{position:absolute;inset:0;background-color:transparent;z-index:0;pointer-events:none;border-radius:var(--kritzel-menu-item-border-radius, 12px)}.menu-item-content{display:flex;align-items:center;gap:8px;position:relative;z-index:1;height:100%}.left{justify-content:flex-start;flex:1;min-width:0}.left>div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.right{justify-content:flex-end}.edit-input{flex:1;height:var(--kritzel-menu-item-input-height, 24px);padding:0;background-color:transparent;border-radius:0;border:none;border-bottom:var(--kritzel-menu-item-input-border, 1px solid #ccc);font-size:var(--kritzel-menu-item-font-size, 14px);width:100%;min-width:0;box-sizing:border-box;outline:none;color:inherit}.edit-input{caret-color:var(--kritzel-menu-item-input-caret-color, currentColor)}.edit-input::selection{background-color:var(--kritzel-menu-item-input-selection-color, #007bff);color:var(--kritzel-menu-item-input-selection-text-color, #ffffff)}.action-button{padding:4px;border-radius:8px;border:none;cursor:var(--kritzel-global-pointer-cursor, pointer);display:flex;align-items:center;justify-content:center;background-color:transparent;background:transparent;-webkit-tap-highlight-color:transparent}.action-button:hover,.action-button:focus{background-color:var(--kritzel-menu-item-button-hover-background-color, hsl(0, 0%, 0%, 4.3%))}.action-button.disabled{pointer-events:none;opacity:0.5}";const _e=class{constructor(e){t(this,e),this.itemSelect=r(this,"itemSelect")}get host(){return n(this)}visible=!1;items=[];icon="ellipsis-vertical";iconSize=24;offsetY=4;itemSelect;menuAnchor=null;isTouchDevice=f.isTouchDevice();toggleMenu=t=>{t.stopPropagation(),this.menuAnchor?this.closeMenu():(window.dispatchEvent(new CustomEvent("kritzel-dismiss-menus")),this.menuAnchor=this.host)};closeMenu=()=>{this.menuAnchor=null};get visibleItems(){return this.items.filter((t=>!1!==t.isVisible))}handleMenuItemSelect=t=>{const{item:e,parent:i}=t.detail;e.action&&e.action(e,i),this.itemSelect.emit(t.detail),this.closeMenu()};render(){return e(i,{key:"1bf8b30bc9c958911e544121db01d74948fb2695",class:{mobile:this.isTouchDevice}},e("div",{key:"3aab8140694f15db066f7c46f243ebc29fb698c1",class:{"more-menu-wrapper":!0,visible:this.visible}},e("button",{key:"55799f62f7bf72af751362315d38dc8b226c0950",class:"more-menu-button",onClick:this.toggleMenu},e("kritzel-icon",{key:"ee627acfcad95a1a978fb3c46d428181bbcb98c1",name:this.icon,size:this.iconSize})),e("kritzel-portal",{key:"e4116b6583e34dd915ffb46ee3b7377ea2ff10e8",anchor:this.menuAnchor,offsetY:this.offsetY,onClose:this.closeMenu},e("kritzel-menu",{key:"a9f50ddf822b14bad8723c67a202dcaa257b817a",items:this.visibleItems,onItemSelect:this.handleMenuItemSelect}))))}};_e.style=":host{display:inline-flex}.more-menu-wrapper{display:inline-flex;padding:var(--kritzel-more-menu-padding, 4px);background-color:var(--kritzel-more-menu-background-color, #ffffff);border-radius:var(--kritzel-more-menu-border-radius, 12px);box-shadow:var(--kritzel-more-menu-box-shadow, 0 0 3px rgba(0, 0, 0, 0.08));border:var(--kritzel-more-menu-border, 1px solid #ebebeb);opacity:0;pointer-events:none;transition:opacity 0.2s ease-out}.more-menu-wrapper.visible{opacity:1;pointer-events:auto}:host(.mobile){--kritzel-more-menu-button-hover-background-color:transparent;--kritzel-more-menu-button-active-background-color:transparent}.more-menu-button{display:flex;align-items:center;justify-content:center;width:var(--kritzel-more-menu-button-width, 40px);height:var(--kritzel-more-menu-button-height, 40px);padding:0;border:none;border-radius:var(--kritzel-more-menu-inner-border-radius, 12px);background-color:transparent;cursor:var(--kritzel-global-pointer-cursor, pointer);box-shadow:none;transition:background-color 150ms ease;-webkit-tap-highlight-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none;color:var(--kritzel-more-menu-button-color, currentColor)}.more-menu-button:hover{background-color:var(--kritzel-more-menu-button-hover-background-color, hsl(0, 0%, 0%, 4.3%))}.more-menu-button:focus-visible{background-color:var(--kritzel-more-menu-button-hover-background-color, hsl(0, 0%, 0%, 4.3%))}.more-menu-button:active{background-color:var(--kritzel-more-menu-button-active-background-color, hsl(0, 0%, 0%, 4.3%))}";const Oe=class{constructor(e){t(this,e),this.valueChange=r(this,"valueChange")}value;min=Number.MIN_SAFE_INTEGER;max=Number.MAX_SAFE_INTEGER;step=1;label="";placeholder="";valueChange;inputValue="";onValueChange(t){this.inputValue=this.shouldShowEmpty(t)?"":String(t)}componentWillLoad(){this.inputValue=this.shouldShowEmpty(this.value)?"":String(this.value)}shouldShowEmpty(t){return void 0===t||t===1/0||t===-1/0}normalizeValue(t){return isNaN(t)?this.value??0:Math.min(this.max,Math.max(this.min,t))}getDecimalPlaces(){const t=String(this.step),e=t.indexOf(".");return-1===e?0:t.length-e-1}roundToStep(t){const e=this.getDecimalPlaces(),i=Math.pow(10,e);return Math.round(t*i)/i}handleInput=t=>{this.inputValue=t.target.value};handleBlur=()=>{this.commitValue()};handleKeyDown=t=>{"Enter"===t.key&&this.commitValue()};handleInvalid=t=>{t.preventDefault()};commitValue(){if(""===this.inputValue.trim())return this.value=void 0,void this.valueChange.emit(void 0);const t=parseFloat(this.inputValue),e=this.normalizeValue(t);this.value=e,this.inputValue=String(e),this.valueChange.emit(e)}handleIncrement=()=>{const t=parseFloat(this.inputValue),e=isNaN(t)?this.value??0:t,i=this.normalizeValue(this.roundToStep(e+this.step));this.value=i,this.inputValue=String(i),this.valueChange.emit(i)};handleDecrement=()=>{const t=parseFloat(this.inputValue),e=isNaN(t)?this.value??0:t,i=this.normalizeValue(this.roundToStep(e-this.step));this.value=i,this.inputValue=String(i),this.valueChange.emit(i)};render(){return e(i,{key:"b27f16d562bc6c61b0a6a289e622e7e35159a782"},e("div",{key:"7f5f2295a60b46dc05c003b10ff74e9da6822406",class:"input-container"},this.label&&e("label",{key:"a5a10af06139312ef0b038ed8c3bb533afa6235c",class:"input-label"},this.label),e("div",{key:"b15b4a2d84ad1185a67cd748176c7585a0789f09",class:"input-wrapper"},e("input",{key:"8da76a405713461ef4eb2f316af6b737493371dd",type:"number",class:"numeric-input",title:"",min:this.min===Number.MIN_SAFE_INTEGER?void 0:this.min,max:this.max===Number.MAX_SAFE_INTEGER?void 0:this.max,step:this.step,value:this.inputValue,placeholder:this.placeholder,onInput:this.handleInput,onBlur:this.handleBlur,onKeyDown:this.handleKeyDown,onInvalid:this.handleInvalid}),e("div",{key:"9813f61998a8902d9a1bc4100dbab744e91e98f8",class:"spinner-buttons"},e("button",{key:"ad688c3332b0dbdd6327c66aed778d3e0d036aab",type:"button",class:"spinner-button spinner-up",onClick:this.handleIncrement,tabIndex:-1,"aria-label":"Increase value"},e("svg",{key:"a21ec61f331a7b672d2ce56cd2d1b30e7f0b22c6",viewBox:"0 0 10 6",class:"spinner-icon"},e("path",{key:"f36b4f68ea3733851bebce1e9f45a1f36e62acdc",d:"M1 5L5 1L9 5",stroke:"currentColor","stroke-width":"1.5",fill:"none","stroke-linecap":"round","stroke-linejoin":"round"}))),e("button",{key:"484373581f26b6cf71194bf545d67997ef7db79f",type:"button",class:"spinner-button spinner-down",onClick:this.handleDecrement,tabIndex:-1,"aria-label":"Decrease value"},e("svg",{key:"5b9199c270ad270729b9f5c1c9246824e1d49cb8",viewBox:"0 0 10 6",class:"spinner-icon"},e("path",{key:"d96e78c311bbc941edfafcb02017da7c367aaf2e",d:"M1 1L5 5L9 1",stroke:"currentColor","stroke-width":"1.5",fill:"none","stroke-linecap":"round","stroke-linejoin":"round"})))))))}static get watchers(){return{value:[{onValueChange:0}]}}};Oe.style=":host{display:block}.input-container{display:flex;flex-direction:column;gap:6px}.input-label{font-size:14px;font-weight:500;color:var(--kritzel-numeric-input-label-color, #333333)}.input-wrapper{display:flex;position:relative}.numeric-input{flex:1;padding:8px 36px 8px 12px;border:1px solid var(--kritzel-numeric-input-border-color, #ebebeb);border-radius:6px;font-size:14px;color:var(--kritzel-numeric-input-text-color, #333333);background-color:var(--kritzel-numeric-input-input-background, #ffffff);outline:none;transition:border-color 150ms ease;box-sizing:border-box}.numeric-input::-webkit-outer-spin-button,.numeric-input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.numeric-input[type='number']{-moz-appearance:textfield}.numeric-input::selection{background-color:var(--kritzel-numeric-input-selection-background, #007AFF);color:var(--kritzel-numeric-input-selection-color, #ffffff)}.numeric-input:hover{border-color:var(--kritzel-numeric-input-hover-border-color, #cccccc)}.numeric-input:focus{border-color:var(--kritzel-numeric-input-focus-border-color, #0066ff);border-width:2px;padding:7px 35px 7px 11px}.spinner-buttons{position:absolute;right:1px;top:1px;bottom:1px;display:flex;flex-direction:column;border-left:1px solid var(--kritzel-numeric-input-border-color, #ebebeb);border-radius:0 5px 5px 0;overflow:hidden}.spinner-button{flex:1;display:flex;align-items:center;justify-content:center;width:24px;padding:0;border:none;background-color:var(--kritzel-numeric-input-spinner-background, #f5f5f5);color:var(--kritzel-numeric-input-spinner-color, #666666);cursor:pointer;transition:background-color 150ms ease}.spinner-button:hover{background-color:var(--kritzel-numeric-input-spinner-hover-background, #ebebeb)}.spinner-button:active{background-color:var(--kritzel-numeric-input-spinner-active-background, #dddddd)}.spinner-up{border-bottom:1px solid var(--kritzel-numeric-input-border-color, #ebebeb)}.spinner-icon{width:10px;height:6px}";const Ee=class{constructor(e){t(this,e),this.valueChange=r(this,"valueChange")}value=1;min=0;max=1;step=.01;previewColor="#000000";valueChange;handleInput(t){const e=parseFloat(t.target.value);this.value=e,this.valueChange.emit(e)}getPercentage(){return Math.round(100*this.value)}render(){const t=this.getPercentage();return e(i,{key:"f6460d2d37ca76c69c62597b32f7567c8a2e1b77"},e("div",{key:"09cb87f8e7e09639b4b794f9c9b30da024a4023f",class:"opacity-container"},e("div",{key:"783cd792f0511945f685483a181b621f3c2551f8",class:"slider-wrapper"},e("input",{key:"d05be4ab1a2a2b19411b12358b7846bebac83a83",type:"range",class:"opacity-slider",min:this.min,max:this.max,step:this.step,value:this.value,onInput:t=>this.handleInput(t),style:{"--slider-progress":`${t}%`}}))))}};Ee.style=":host{display:flex;flex-direction:column;padding:0;box-sizing:border-box}.opacity-container{display:flex;align-items:center;width:232px}.slider-wrapper{flex:1;display:flex;align-items:center}.opacity-slider{-webkit-appearance:none;appearance:none;width:100%;height:6px;border-radius:3px;background:linear-gradient( to right, var(--kritzel-opacity-slider-active-color, #007AFF) 0%, var(--kritzel-opacity-slider-active-color, #007AFF) var(--slider-progress, 100%), var(--kritzel-opacity-slider-track-color, #e0e0e0) var(--slider-progress, 100%), var(--kritzel-opacity-slider-track-color, #e0e0e0) 100% );outline:none;cursor:var(--kritzel-global-pointer-cursor, pointer)}.opacity-slider::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:16px;height:16px;border-radius:50%;background:var(--kritzel-opacity-slider-thumb-color, #ffffff);border:2px solid var(--kritzel-opacity-slider-thumb-border-color, #007AFF);cursor:var(--kritzel-global-pointer-cursor, pointer);box-shadow:0 1px 3px rgba(0, 0, 0, 0.2);transition:transform 0.1s ease}.opacity-slider::-webkit-slider-thumb:hover{transform:scale(1.1)}.opacity-slider::-moz-range-thumb{width:16px;height:16px;border-radius:50%;background:var(--kritzel-opacity-slider-thumb-color, #ffffff);border:2px solid var(--kritzel-opacity-slider-thumb-border-color, #007AFF);cursor:var(--kritzel-global-pointer-cursor, pointer);box-shadow:0 1px 3px rgba(0, 0, 0, 0.2);transition:transform 0.1s ease}.opacity-slider::-moz-range-thumb:hover{transform:scale(1.1)}.opacity-slider::-moz-range-track{height:6px;border-radius:3px;background:transparent}.opacity-slider:focus{outline:none}.opacity-slider:focus::-webkit-slider-thumb{box-shadow:0 0 0 2px var(--kritzel-global-focus-ring-color, rgba(0, 122, 255, 0.3))}.opacity-slider:focus::-moz-range-thumb{box-shadow:0 0 0 2px var(--kritzel-global-focus-ring-color, rgba(0, 122, 255, 0.3))}";const De=class{constructor(e){t(this,e),this.valueChange=r(this,"valueChange")}tabs=[];value;valueChange;handleTabClick(t){this.value!==t&&(this.value=t,this.valueChange.emit(t))}handleKeyDown(t,e){const i=this.tabs;let r=e;switch(t.key){case"ArrowLeft":t.preventDefault(),r=e>0?e-1:i.length-1;break;case"ArrowRight":t.preventDefault(),r=e<i.length-1?e+1:0;break;case"Home":t.preventDefault(),r=0;break;case"End":t.preventDefault(),r=i.length-1;break;default:return}this.handleTabClick(i[r].id);const n=t.currentTarget.parentElement,o=n?.querySelectorAll("button");o?.[r]?.focus()}render(){return e(i,{key:"cd6993107010e578b91af23101da27bd2ef943cd"},e("div",{key:"509c023b5bf91de1f463c8e080b83216a94d7d64",class:"pill-tabs-container",role:"tablist"},this.tabs.map(((t,i)=>e("button",{key:t.id,class:{"pill-tab":!0,selected:this.value===t.id},role:"tab","aria-selected":this.value===t.id?"true":"false",tabIndex:this.value===t.id?0:-1,onClick:()=>this.handleTabClick(t.id),onKeyDown:t=>this.handleKeyDown(t,i)},t.icon&&e("kritzel-icon",{name:t.icon,size:16}),e("span",{class:"pill-tab-label"},t.label))))))}};De.style=":host{display:block}.pill-tabs-container{display:inline-flex;align-items:center;gap:4px;padding:4px;border-radius:var(--kritzel-pill-tabs-border-radius, 10px);background:var(--kritzel-pill-tabs-background, #f0f0f0);box-sizing:border-box}.pill-tab{display:flex;align-items:center;justify-content:center;gap:6px;padding:8px 16px;border:none;border-radius:var(--kritzel-pill-tabs-tab-border-radius, 8px);background:var(--kritzel-pill-tabs-tab-background, transparent);color:var(--kritzel-pill-tabs-tab-text-color, #666666);font-family:inherit;font-size:14px;font-weight:500;cursor:var(--kritzel-global-pointer-cursor, pointer);transition:background-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease;white-space:nowrap}.pill-tab:hover:not(.selected){background:var(--kritzel-pill-tabs-tab-background-hover, rgba(0, 0, 0, 0.05))}.pill-tab.selected{background:var(--kritzel-pill-tabs-tab-background-selected, #ffffff);color:var(--kritzel-pill-tabs-tab-text-color-selected, #000000);box-shadow:var(--kritzel-pill-tabs-tab-shadow-selected, 0 1px 3px rgba(0, 0, 0, 0.1))}.pill-tab:focus{outline:none}.pill-tab:focus-visible{box-shadow:0 0 0 2px var(--kritzel-global-focus-ring-color, rgba(0, 122, 255, 0.3))}.pill-tab-label{line-height:1}.pill-tab kritzel-icon{flex-shrink:0}";const Fe=class{constructor(e){t(this,e),this.close=r(this,"close")}get host(){return n(this)}anchor;anchorChanged(t){t?(this.openPortal(),requestAnimationFrame((()=>{this.calculatePosition(),this.autoFocus&&this.focusFirstElement()}))):this.closePortal()}offsetX;offsetY;autoFocus=!0;close;handleDismissMenus(){this.portal&&(this.close.emit(),this.closePortal())}handleOutsideClick(t){this.lastAddedPortal===this.portal&&(this.host.contains(t.target)||(this.close.emit(),this.closePortal()))}handleKeyDown(t){if(this.lastAddedPortal===this.portal){if("Escape"===t.key)return t.stopPropagation(),this.anchor.focus(),this.close.emit(),void this.closePortal();if("Tab"!==t.key){if("Enter"===t.key){const e=this.getDeepActiveElement();e?.click&&(t.preventDefault(),e.click())}}else this.trapFocus(t)}}handleResize(){this.calculatePosition()}handleWindowScroll(){if(!dt.isElementInViewport(this.anchor))return this.anchor?.blur(),void this.closePortal();this.calculatePosition()}portal;id=`portal-${V.generateUUID()}`;defaultOffset=0;minLeft=0;themeObserver;focusFirstElement(){requestAnimationFrame((()=>{this.firstFocusableElement?.focus?.()}))}getDeepActiveElement(){let t=document.activeElement;for(;t?.shadowRoot?.activeElement;)t=t.shadowRoot.activeElement;return t}trapFocus(t){const e=dt.getFocusableElements(this.host);if(0===e.length)return;const i=e[0],r=e[e.length-1],n=this.getDeepActiveElement();t.shiftKey?n===i&&(r.focus(),t.preventDefault()):n===r&&(i.focus(),t.preventDefault())}get firstFocusableElement(){const t=this.host.shadowRoot?.querySelector("slot"),e=t?.assignedElements({flatten:!0})[0];return e?dt.getFocusableElements(e)[0]??e:null}get lastAddedPortal(){const t=Array.from(document.querySelectorAll('[id^="portal-"]'));return t.length?t[t.length-1]:null}calculateLeft(){if(!this.anchor||!this.portal)return 0;const t=this.anchor.getBoundingClientRect(),e=this.portal.getBoundingClientRect(),i=this.offsetX??this.defaultOffset;let r;r=t.left+t.width/2>window.innerWidth/2?t.right-e.width-i:t.left+i;const n=window.innerWidth-e.width-this.minLeft;return r<this.minLeft&&(r=this.minLeft),r>n&&(r=n),Math.round(r+window.scrollX)}calculateTop(){if(!this.anchor||!this.portal)return 0;const t=this.anchor.getBoundingClientRect(),e=this.portal.getBoundingClientRect(),i=this.offsetY??this.defaultOffset;let r=t.bottom+i;const n=window.innerHeight-t.bottom-i-8,o=t.top-i-8;return this.host.style.removeProperty("--kritzel-portal-max-height"),e.height<=n?r=t.bottom+i:e.height<=o?r=t.top-e.height-i:n>=o?(r=t.bottom+i,this.host.style.setProperty("--kritzel-portal-max-height",`${n}px`)):(r=8,this.host.style.setProperty("--kritzel-portal-max-height",`${o}px`)),Math.round(r+window.scrollY)}getThemeProvider(){if(!this.anchor)return null;let t=this.anchor;for(;t;){const e=t.closest("kritzel-editor");if(e instanceof HTMLElement)return e;const i=t.closest('[id^="portal-"]');if(i instanceof HTMLElement)return i;const r=t.getRootNode();if(!(r instanceof ShadowRoot))return null;t=r.host}return null}openPortal(){this.portal=document.createElement("div"),this.portal.setAttribute("id",this.id),this.portal.style.zIndex="1",this.portal.style.position="absolute",this.portal.style.top="0px",this.portal.style.left="0px",this.portal.style.visibility="hidden";const t=this.getThemeProvider();if(t){const e=()=>{if(this.portal)for(let e=0;e<t.style.length;e++){const i=t.style[e];i.startsWith("--kritzel-")&&this.portal.style.setProperty(i,t.style.getPropertyValue(i))}};e(),this.themeObserver=new MutationObserver((()=>e())),this.themeObserver.observe(t,{attributes:!0,attributeFilter:["style"]})}this.portal.appendChild(this.host),document.body.append(this.portal)}closePortal(){this.themeObserver?.disconnect(),this.themeObserver=null;const t=document.getElementById(this.id);t&&(document.body.removeChild(t),this.host.remove())}calculatePosition(){if(!this.anchor||!this.portal)return;const t=this.calculateTop(),e=this.calculateLeft();this.portal.style.top=`${t}px`,this.portal.style.left=`${e}px`,this.portal.style.visibility="visible"}render(){return e(i,{key:"6acf9d402aa0ee151d93b912fc2b9d46cfe88d07",style:{display:this.anchor?"block":"none"}},e("slot",{key:"dbeff1735d422e818179346f5880555fbadddba9"}))}static get watchers(){return{anchor:[{anchorChanged:0}]}}},Le="kritzel-settings",Re=-1/0,We=1/0,Pe=-1/0,Be=1/0,Ve={showViewportInfo:!1,showObjectInfo:!1,showSyncProviderInfo:!0,showMigrationInfo:!0},Ue=[{id:"general",label:"General",icon:"settings"},{id:"viewport",label:"Viewport",icon:"viewport"},{id:"shortcuts",label:"Keyboard Shortcuts",icon:"command"},{id:"developer",label:"Developer Options",icon:"braces"},{id:"about",label:"About",icon:"info"}],Ne=class{constructor(e){t(this,e),this.settingsChange=r(this,"settingsChange")}get host(){return n(this)}shortcuts=[];editorId;isDialogOpen=!1;selectedCategoryId=Ue[0].id;scaleMin=1e-4;scaleMax=1e3;lockDrawingScale=!0;currentTheme="light";viewportBoundaryLeft=Re;viewportBoundaryRight=We;viewportBoundaryTop=Pe;viewportBoundaryBottom=Be;debugInfo={...Ve};settingsChange;componentWillLoad(){this.loadSettings()}get storageKey(){return this.editorId?`${Le}-${this.editorId}`:Le}loadSettings(){const t=localStorage.getItem(this.storageKey);if(t)try{const e=JSON.parse(t);"number"==typeof e.scaleMin&&(this.scaleMin=e.scaleMin),"number"==typeof e.scaleMax&&(this.scaleMax=e.scaleMax),"boolean"==typeof e.lockDrawingScale&&(this.lockDrawingScale=e.lockDrawingScale),"light"!==e.theme&&"dark"!==e.theme||(this.currentTheme=e.theme),"number"==typeof e.viewportBoundaryLeft&&(this.viewportBoundaryLeft=e.viewportBoundaryLeft),"number"==typeof e.viewportBoundaryRight&&(this.viewportBoundaryRight=e.viewportBoundaryRight),"number"==typeof e.viewportBoundaryTop&&(this.viewportBoundaryTop=e.viewportBoundaryTop),"number"==typeof e.viewportBoundaryBottom&&(this.viewportBoundaryBottom=e.viewportBoundaryBottom),e.debugInfo&&(this.debugInfo={...Ve,...e.debugInfo})}catch{}}saveSettings(){const t={scaleMin:this.scaleMin,scaleMax:this.scaleMax,lockDrawingScale:this.lockDrawingScale,theme:this.currentTheme,viewportBoundaryLeft:this.viewportBoundaryLeft,viewportBoundaryRight:this.viewportBoundaryRight,viewportBoundaryTop:this.viewportBoundaryTop,viewportBoundaryBottom:this.viewportBoundaryBottom,debugInfo:this.debugInfo};localStorage.setItem(this.storageKey,JSON.stringify(t)),this.settingsChange.emit(t)}handleScaleMinChange=t=>{this.scaleMin=t.detail,this.saveSettings()};handleScaleMaxChange=t=>{this.scaleMax=t.detail,this.saveSettings()};handleLockDrawingScaleChange=t=>{this.lockDrawingScale=t.detail,this.saveSettings()};handleThemeChange=t=>{this.currentTheme=t.detail?"dark":"light",this.saveSettings()};handleViewportBoundaryLeftChange=t=>{this.viewportBoundaryLeft=t.detail??Re,this.saveSettings()};handleViewportBoundaryRightChange=t=>{this.viewportBoundaryRight=t.detail??We,this.saveSettings()};handleViewportBoundaryTopChange=t=>{this.viewportBoundaryTop=t.detail??Pe,this.saveSettings()};handleViewportBoundaryBottomChange=t=>{this.viewportBoundaryBottom=t.detail??Be,this.saveSettings()};handleDebugInfoChange=t=>e=>{this.debugInfo={...this.debugInfo,[t]:e.detail},this.saveSettings()};async open(){this.isDialogOpen=!0}closeDialog=()=>{this.isDialogOpen=!1};handleCategorySelect=t=>{this.selectedCategoryId=t.detail.item.id};formatKeyCombo(t){const e=[];return t.ctrl&&e.push("Ctrl"),t.shift&&e.push("Shift"),e.push(this.formatKey(t.key)),e.join("+")}formatKey(t){return{Escape:"Esc",Delete:"Del"," ":"Space"}[t]??t.toUpperCase()}groupShortcutsByCategory(){const t=new Map;for(const e of this.shortcuts){const i=t.get(e.category)||[];i.push(e),t.set(e.category,i)}return t}renderCategoryContent(){switch(this.selectedCategoryId){case"general":return e("div",{class:"settings-content"},e("h3",null,"General Settings"),e("div",{class:"settings-group"},e("div",{class:"settings-item"},e("label",{class:"settings-label"},"Dark Mode"),e("p",{class:"settings-description"},"Toggle between light and dark color themes for the editor interface."),e("kritzel-slide-toggle",{checked:"dark"===this.currentTheme,label:"Dark Mode",onCheckedChange:this.handleThemeChange})),e("div",{class:"settings-item"},e("label",{class:"settings-label"},"Lock Drawing Scale"),e("p",{class:"settings-description"},"When enabled, drawn objects maintain a fixed visual size regardless of the current zoom level."),e("kritzel-slide-toggle",{checked:this.lockDrawingScale,label:"Lock Drawing Scale",onCheckedChange:this.handleLockDrawingScaleChange}))));case"viewport":return e("div",{class:"settings-content"},e("h3",null,"Viewport Settings"),e("div",{class:"settings-group"},e("div",{class:"settings-item"},e("label",{class:"settings-label"},"Minimum Zoom Level"),e("p",{class:"settings-description"},"Sets the minimum zoom level. Lower values allow zooming out further to see more of the canvas."),e("kritzel-numeric-input",{value:this.scaleMin,min:1e-4,max:1,step:1e-4,onValueChange:this.handleScaleMinChange})),e("div",{class:"settings-item"},e("label",{class:"settings-label"},"Maximum Zoom Level"),e("p",{class:"settings-description"},"Sets the maximum zoom level. Higher values allow zooming in closer for detailed work."),e("kritzel-numeric-input",{value:this.scaleMax,min:1,max:1e3,step:1,onValueChange:this.handleScaleMaxChange})),e("div",{class:"settings-item"},e("label",{class:"settings-label"},"Viewport Boundary Left"),e("p",{class:"settings-description"},"Left boundary in world coordinates. Set to limit how far left the viewport can pan."),e("kritzel-numeric-input",{value:this.viewportBoundaryLeft,step:100,placeholder:"Infinite",onValueChange:this.handleViewportBoundaryLeftChange})),e("div",{class:"settings-item"},e("label",{class:"settings-label"},"Viewport Boundary Right"),e("p",{class:"settings-description"},"Right boundary in world coordinates. Set to limit how far right the viewport can pan."),e("kritzel-numeric-input",{value:this.viewportBoundaryRight,step:100,placeholder:"Infinite",onValueChange:this.handleViewportBoundaryRightChange})),e("div",{class:"settings-item"},e("label",{class:"settings-label"},"Viewport Boundary Top"),e("p",{class:"settings-description"},"Top boundary in world coordinates. Set to limit how far up the viewport can pan."),e("kritzel-numeric-input",{value:this.viewportBoundaryTop,step:100,placeholder:"Infinite",onValueChange:this.handleViewportBoundaryTopChange})),e("div",{class:"settings-item"},e("label",{class:"settings-label"},"Viewport Boundary Bottom"),e("p",{class:"settings-description"},"Bottom boundary in world coordinates. Set to limit how far down the viewport can pan."),e("kritzel-numeric-input",{value:this.viewportBoundaryBottom,step:100,placeholder:"Infinite",onValueChange:this.handleViewportBoundaryBottomChange}))));case"shortcuts":return e("div",{class:"settings-content"},e("h3",null,"Keyboard Shortcuts"),e("div",{class:"shortcuts-list"},Array.from(this.groupShortcutsByCategory()).map((([t,i])=>e("div",{class:"shortcuts-category",key:t},e("h4",{class:"shortcuts-category-title"},t),e("div",{class:"shortcuts-group"},i.map((t=>e("div",{class:"shortcut-item",key:t.key+t.label},e("span",{class:"shortcut-label"},t.label),e("kbd",{class:"shortcut-key"},this.formatKeyCombo(t)))))))))));case"developer":return e("div",{class:"settings-content"},e("h3",null,"Developer Options"),e("div",{class:"settings-group"},e("div",{class:"settings-item"},e("label",{class:"settings-label"},"Show Viewport Info"),e("p",{class:"settings-description"},"Display viewport debug information such as position, zoom level, and boundaries."),e("kritzel-slide-toggle",{checked:this.debugInfo.showViewportInfo,label:"Show Viewport Info",onCheckedChange:this.handleDebugInfoChange("showViewportInfo")})),e("div",{class:"settings-item"},e("label",{class:"settings-label"},"Show Object Info"),e("p",{class:"settings-description"},"Display debug information about objects on the canvas."),e("kritzel-slide-toggle",{checked:this.debugInfo.showObjectInfo,label:"Show Object Info",onCheckedChange:this.handleDebugInfoChange("showObjectInfo")})),e("div",{class:"settings-item"},e("label",{class:"settings-label"},"Show Sync Provider Info"),e("p",{class:"settings-description"},"Display debug information about the sync provider connection status."),e("kritzel-slide-toggle",{checked:this.debugInfo.showSyncProviderInfo,label:"Show Sync Provider Info",onCheckedChange:this.handleDebugInfoChange("showSyncProviderInfo")})),e("div",{class:"settings-item"},e("label",{class:"settings-label"},"Show Migration Info"),e("p",{class:"settings-description"},"Display debug information about data migrations."),e("kritzel-slide-toggle",{checked:this.debugInfo.showMigrationInfo,label:"Show Migration Info",onCheckedChange:this.handleDebugInfoChange("showMigrationInfo")}))));case"about":return e("div",{class:"settings-content"},e("h3",null,"About"),e("p",null,"Kritzel - A drawing application"),e("p",{class:"version-info"},"Version ","0.2.1"),e("p",{class:"version-info"},"App-State Schema v",P),e("p",{class:"version-info"},"Workspace Schema v",R));default:return null}}render(){return e(i,{key:"33618317a3d4a60cda4369cde1e694cd13116d0a"},e("kritzel-dialog",{key:"274de12d633d430628c1ac2f1ac9779596d0d249",isOpen:this.isDialogOpen,dialogTitle:"Settings",size:"large",onDialogClose:this.closeDialog},e("kritzel-master-detail",{key:"d771531248ec5db38b2d711334c74dde28985f91",items:Ue,selectedItemId:this.selectedCategoryId,onItemSelect:this.handleCategorySelect},this.renderCategoryContent())))}};Ne.style=":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:600;color:var(--kritzel-settings-label-color, #333333);margin:0 0 4px 0}.settings-description{font-size:12px;color:var(--kritzel-settings-description-color, #888888);margin:0;line-height:1.4}.shortcuts-list{display:flex;flex-direction:column;gap:24px}.shortcuts-category{display:flex;flex-direction:column;gap:8px}.shortcuts-category-title{font-size:14px;font-weight:600;color:var(--kritzel-settings-label-color, #333333);margin:0 0 4px 0}.shortcuts-group{display:flex;flex-direction:column;gap:4px}.shortcut-item{display:flex;justify-content:space-between;align-items:center;padding:6px 8px;border-radius:4px;background:var(--kritzel-settings-shortcut-item-bg, rgba(0, 0, 0, 0.02))}.shortcut-label{font-size:14px;color:var(--kritzel-settings-content-text-color, #666666)}.shortcut-key{font-family:monospace;font-size:12px;padding:2px 8px;border-radius:4px;background:var(--kritzel-settings-shortcut-key-bg, #f0f0f0);color:var(--kritzel-settings-shortcut-key-color, #333333);border:1px solid var(--kritzel-settings-shortcut-key-border, #ddd)}";const Ke=class{constructor(e){t(this,e),this.valueChange=r(this,"valueChange")}value="transparent";valueChange;handleFillChange(t){this.value=t,this.valueChange.emit(t)}renderFillIcon(t){const i="var(--kritzel-global-text-primary)";return e("svg",{viewBox:"0 0 24 24",class:"fill-icon"},e("rect","transparent"===t?{x:"4",y:"4",width:"16",height:"16",rx:"2",fill:"none",stroke:i,"stroke-width":"2"}:{x:"4",y:"4",width:"16",height:"16",rx:"2",fill:i,stroke:i,"stroke-width":"2"}))}render(){return e(i,{key:"5f915acf7a98ac585f5aba494981cbbb38252c93"},e("div",{key:"e8a7fd9a1611d5cace9fbf73c1421b211a8b7d89",class:"fill-row"},e("button",{key:"cbd388e362c94e36220e93f55fd0140a774e0bd7",class:{"fill-option":!0,selected:"transparent"===this.value},onClick:()=>this.handleFillChange("transparent"),title:"Transparent background"},this.renderFillIcon("transparent")),e("button",{key:"532eec1936f973eb2fb44c15839400e53ac4f4f7",class:{"fill-option":!0,selected:"filled"===this.value},onClick:()=>this.handleFillChange("filled"),title:"Filled background"},this.renderFillIcon("filled"))))}};Ke.style=":host{display:flex;flex-direction:column;gap:12px;padding:0;box-sizing:border-box}.fill-row{display:flex;align-items:center;gap:4px}.fill-option{display:flex;justify-content:center;align-items:center;width:48px;height:32px;border-radius:6px;cursor:var(--kritzel-global-pointer-cursor, pointer);border:2px solid transparent;box-sizing:border-box;background:var(--kritzel-shape-fill-option-background, #ffffff);padding:4px;transition:background-color 0.15s ease, border-color 0.15s ease}.fill-option:hover{background-color:var(--kritzel-shape-fill-hover-background-color, #ebebeb)}.fill-option.selected{border-color:var(--kritzel-selection-border-color, #007AFF);background-color:var(--kritzel-shape-fill-selected-background-color, #ebebeb)}.fill-option:focus{outline:none;box-shadow:0 0 0 2px var(--kritzel-global-focus-ring-color, rgba(0, 122, 255, 0.3))}.fill-icon{width:100%;height:100%}";const He=class{constructor(e){t(this,e),this.toggleIsPublic=r(this,"toggleIsPublic"),this.dialogClosed=r(this,"dialogClosed")}get host(){return n(this)}isPublic=!1;workspaceId=void 0;onIsPublicChange(t){this.internalIsPublic=t}isDialogOpen=!1;internalIsPublic=!1;copySuccess=!1;toggleIsPublic;dialogClosed;async open(){this.internalIsPublic=this.isPublic,this.isDialogOpen=!0}async close(){this.isDialogOpen=!1}handleToggleChange=t=>{const e=t.detail;this.internalIsPublic=e,this.toggleIsPublic.emit(e)};getShareUrl(){if(!this.workspaceId)return"";const t=new URL(this.workspaceId,window.location.origin);return t.searchParams.set("share","true"),t.toString()}handleCopyUrl=async()=>{const t=this.getShareUrl();if(t)try{await navigator.clipboard.writeText(t),this.copySuccess=!0,setTimeout((()=>{this.copySuccess=!1}),2e3)}catch{const e=document.createElement("textarea");e.value=t,document.body.appendChild(e),e.select(),document.execCommand("copy"),document.body.removeChild(e),this.copySuccess=!0,setTimeout((()=>{this.copySuccess=!1}),2e3)}};closeDialog=()=>{this.isDialogOpen=!1,this.dialogClosed.emit()};render(){return e(i,{key:"a104c14b2492d97f3ada98c9eaaa845d63074063"},e("kritzel-dialog",{key:"ae2155436f9dc7530dadfed5da92b2ae8781c3f5",dialogTitle:"Share Workspace",isOpen:this.isDialogOpen,onDialogClose:this.closeDialog,size:"small"},e("div",{key:"d419303e63e8183fec99ad2743d5d377c6b2b642",class:"share-content"},e("div",{key:"913ee65831ff47e6d4d4ba2e26426892bc583827",class:"share-section"},e("div",{key:"c32d489e5f7891d23d133c1677c6022e9fc365ab",class:"share-row"},e("div",{key:"1aa00b5578c657c20910bd1af44d166806d2fe3d",class:"share-label-group"},e("label",{key:"2d00004314e0d1141397ee7af4e7f923e3182ebf",class:"share-label"},"Link sharing"),e("p",{key:"c698ba01de2b252cf6453e0d339044d78c0a701e",class:"share-description"},this.internalIsPublic?"Anyone with the link can access this workspace.":"Link sharing is disabled. Only you can access this workspace.")),e("kritzel-slide-toggle",{key:"dcc56bf4644c2c56438115b0e9efae7e74ac77d7",checked:this.internalIsPublic,onCheckedChange:this.handleToggleChange,label:"Enable link sharing"}))),this.internalIsPublic&&e("div",{key:"73c72ec32b5fdd74e333594d37aa9601ce274121",class:"share-section"},e("div",{key:"f7cf9d1f4c1680ed35c0751df8abf46fbaec2f52",class:"share-url-container"},e("input",{key:"971c49e294ecf0d95854f54a42b1d45c6bd2c3ae",type:"text",class:"share-url-input",value:this.getShareUrl(),readOnly:!0,onClick:t=>t.target.select()}),e("button",{key:"ff40fb3e0cc45b5b9d99b0b7f0ff7c3939f7ecb6",class:{"copy-button":!0,"copy-success":this.copySuccess},onClick:this.handleCopyUrl,title:this.copySuccess?"Copied!":"Copy link"},e("kritzel-icon",{key:"b299bb0c2a03f5522134f5b3cee5de6cc1d4df5d",name:this.copySuccess?"check":"copy",size:18})))))))}static get watchers(){return{isPublic:[{onIsPublicChange:0}]}}};He.style=":host{display:contents}kritzel-dialog{--kritzel-dialog-width-small:420px}.share-content{display:flex;flex-direction:column;gap:20px}.share-section{display:flex;flex-direction:column;gap:8px}.share-section-revoke{padding-top:12px;border-top:1px solid var(--kritzel-share-dialog-border-color, #e5e5e5)}.share-row{display:flex;align-items:center;justify-content:space-between;gap:16px}.share-label-group{display:flex;flex-direction:column;gap:8px;flex:1}.share-label{font-size:14px;font-weight:600;color:var(--kritzel-share-dialog-label-color, #333333);margin:0}.share-description{font-size:12px;color:var(--kritzel-share-dialog-description-color, #666666);margin:0;line-height:1.4}.share-url-container{display:flex;align-items:center;gap:8px;background:var(--kritzel-share-dialog-input-background, #f5f5f5);border:1px solid var(--kritzel-share-dialog-input-border-color, #e0e0e0);border-radius:6px;padding:4px 4px 4px 12px}.share-url-input{flex:1;border:none;background:transparent;font-size:13px;color:var(--kritzel-share-dialog-input-text-color, #333333);outline:none;min-width:0;padding:8px 0}.share-url-input:focus{outline:none}.share-url-input::selection{background:var(--kritzel-share-dialog-selection-color, #cce5ff)}.copy-button{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border:none;border-radius:4px;background:var(--kritzel-share-dialog-copy-button-background, #ffffff);color:var(--kritzel-share-dialog-copy-button-color, #666666);cursor:pointer;transition:all 0.15s ease;flex-shrink:0}.copy-button:hover{background:var(--kritzel-share-dialog-copy-button-hover-background, #e8e8e8);color:var(--kritzel-share-dialog-copy-button-hover-color, #333333)}.copy-button.copy-success{background:var(--kritzel-share-dialog-copy-success-background, #d4edda);color:var(--kritzel-share-dialog-copy-success-color, #28a745)}.revoke-button{align-self:flex-start;padding:8px 16px;border:1px solid var(--kritzel-share-dialog-revoke-button-border-color, #dc3545);border-radius:6px;background:transparent;color:var(--kritzel-share-dialog-revoke-button-color, #dc3545);font-size:13px;font-weight:500;cursor:pointer;transition:all 0.15s ease}.revoke-button:hover{background:var(--kritzel-share-dialog-revoke-button-hover-background, #dc3545);color:var(--kritzel-share-dialog-revoke-button-hover-color, #ffffff)}kritzel-dropdown{--kritzel-dropdown-trigger-padding:8px 12px;--kritzel-dropdown-trigger-font-size:13px}";const Ge=class{constructor(e){t(this,e),this.checkedChange=r(this,"checkedChange")}checked=!1;disabled=!1;label;checkedChange;handleToggle=()=>{this.disabled||(this.checked=!this.checked,this.checkedChange.emit(this.checked))};handleKeyDown=t=>{" "!==t.key&&"Enter"!==t.key||(t.preventDefault(),this.handleToggle())};render(){return e(i,{key:"376beaa4424858c3aaf1466797663024889c0f73",class:{checked:this.checked,disabled:this.disabled},tabIndex:this.disabled?-1:0,role:"switch","aria-checked":this.checked?"true":"false","aria-disabled":this.disabled?"true":"false","aria-label":this.label,onClick:this.handleToggle,onKeyDown:this.handleKeyDown},e("div",{key:"2108fe8de84e0b9a619667b5ab4f57215c185375",class:"toggle-track"},e("div",{key:"ff8253ce660ca62313dea3034ac4980135eaac88",class:"toggle-thumb"})))}};Ge.style=":host{display:inline-flex;align-items:center;cursor:var(--kritzel-global-pointer-cursor, pointer);outline:none;z-index:1;-webkit-tap-highlight-color:transparent}:host(:focus-visible) .toggle-track{box-shadow:0 0 0 2px var(--kritzel-global-focus-ring-color, rgba(0, 122, 255, 0.3))}:host(.disabled){opacity:0.5;pointer-events:none;cursor:default}.toggle-track{position:relative;width:var(--kritzel-slide-toggle-width, 40px);height:var(--kritzel-slide-toggle-height, 22px);background-color:var(--kritzel-slide-toggle-track-color, #ccc);border-radius:var(--kritzel-slide-toggle-border-radius, 11px);transition:background-color var(--kritzel-slide-toggle-transition-duration, 0.2s) ease}:host(.checked) .toggle-track{background-color:var(--kritzel-slide-toggle-track-checked-color, #007AFF)}.toggle-thumb{position:absolute;top:50%;left:2px;transform:translateY(-50%);width:var(--kritzel-slide-toggle-thumb-size, 18px);height:var(--kritzel-slide-toggle-thumb-size, 18px);background-color:var(--kritzel-slide-toggle-thumb-color, #fff);border-radius:50%;box-shadow:0 1px 3px rgba(0, 0, 0, 0.2);transition:left var(--kritzel-slide-toggle-transition-duration, 0.2s) ease}:host(.checked) .toggle-thumb{left:calc(var(--kritzel-slide-toggle-width, 40px) - var(--kritzel-slide-toggle-thumb-size, 18px) - 2px)}";const Ye=class{constructor(e){t(this,e),this.mainButtonClick=r(this,"mainButtonClick"),this.itemSelect=r(this,"itemSelect"),this.itemSave=r(this,"itemSave"),this.itemCancel=r(this,"itemCancel"),this.itemToggleChildMenu=r(this,"itemToggleChildMenu"),this.itemCloseChildMenu=r(this,"itemCloseChildMenu"),this.menuOpen=r(this,"menuOpen"),this.menuClose=r(this,"menuClose")}get host(){return n(this)}buttonIcon="plus";dropdownIcon="chevron-down";items=[];mainButtonDisabled=!1;menuButtonDisabled=!1;mainButtonClick;itemSelect;itemSave;itemCancel;itemToggleChildMenu;itemCloseChildMenu;menuOpen;menuClose;isMenuOpen=!1;isTouchDevice=f.isTouchDevice();anchorElement;menuScrollTop=0;splitMenuButtonRef;menuRef;async open(){this.isMenuOpen||(window.dispatchEvent(new CustomEvent("kritzel-dismiss-menus")),this.isMenuOpen=!0,this.anchorElement=this.host,this.menuOpen.emit())}async focusMenu(){this.menuRef&&await this.menuRef.setFocus()}handleButtonClick=t=>{t.stopPropagation(),this.mainButtonClick.emit()};toggleMenu=t=>{t.stopPropagation(),this.isMenuOpen?this.closeMenu():this.openMenu(t)};openMenu=t=>{t.stopPropagation(),window.dispatchEvent(new CustomEvent("kritzel-dismiss-menus")),this.isMenuOpen=!0,this.anchorElement=this.host,this.menuOpen.emit(),requestAnimationFrame((()=>{this.menuRef?.setScrollTop(this.menuScrollTop)}))};closeMenu=()=>{this.isMenuOpen=!1,this.anchorElement=null,this.splitMenuButtonRef?.blur(),this.menuClose.emit()};handleItemSelect=t=>{this.itemSelect.emit(t.detail)};handleItemSave=t=>{this.itemSave.emit(t.detail)};handleItemCancel=t=>{this.itemCancel.emit(t.detail)};handleItemToggleChildMenu=t=>{this.itemToggleChildMenu.emit(t.detail)};handleItemCloseChildMenu=t=>{this.itemCloseChildMenu.emit(t.detail)};handleScroll=t=>{this.menuScrollTop=t.target.scrollTop};render(){return e(i,{key:"1ec4c6806f5ff020d675b34f32efeecf6ddf40ab",class:{mobile:this.isTouchDevice}},e("button",{key:"ff149370b08338579206820fb5b1da982b45ff92",class:"split-main-button",tabIndex:0,onClick:this.handleButtonClick,disabled:this.mainButtonDisabled},this.buttonIcon&&e("kritzel-icon",{key:"73aed4cc46319b6dd3d79bbdacb56f91441a0be5",name:this.buttonIcon})),e("div",{key:"3cd4d664db9b851427d41cb69aa023cc837f4f63",class:"split-divider"}),e("button",{key:"4669e0732cad379d08c2d73c66037ae6176a4365",ref:t=>this.splitMenuButtonRef=t,class:"split-menu-button",tabIndex:0,onClick:this.toggleMenu,disabled:this.menuButtonDisabled},e("kritzel-icon",{key:"6df7339f7ec3df14fa228f651249584e925ab3d8",name:this.dropdownIcon})),e("kritzel-portal",{key:"4f8698379fe3a44fcd9f414dd499e2dbe12ed494",anchor:this.anchorElement,offsetY:4,onClose:this.closeMenu},e("kritzel-menu",{key:"8a7bc82c1dc34a70f55f5aca613aecb225b164ad",ref:t=>this.menuRef=t,items:this.items,onItemSelect:this.handleItemSelect,onItemSave:this.handleItemSave,onItemCancel:this.handleItemCancel,onItemToggleChildMenu:this.handleItemToggleChildMenu,onItemCloseChildMenu:this.handleItemCloseChildMenu,onClose:this.closeMenu,onScroll:this.handleScroll})))}};Ye.style=":host{position:relative;display:flex;align-items:center;font-family:sans-serif;z-index:1;padding:var(--kritzel-split-button-padding, 4px);background-color:var(--kritzel-split-button-background-color, #ffffff);border-radius:var(--kritzel-split-button-border-radius, 12px);box-shadow:var(--kritzel-split-button-box-shadow, 0 0 3px rgba(0, 0, 0, 0.08));border:var(--kritzel-split-button-border, 1px solid #ebebeb);gap:var(--kritzel-split-button-gap, 4px)}:host(.mobile){--kritzel-split-button-hover-background-color:transparent}button{border:none;background-color:transparent;padding:0;margin:0;font-family:inherit;font-size:inherit;color:var(--kritzel-split-button-color, #000000);-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:var(--kritzel-global-pointer-cursor, pointer);text-align:center;display:flex;align-items:center;justify-content:center;pointer-events:all;-webkit-tap-highlight-color:transparent}.split-main-button,.split-menu-button{height:auto;display:flex;align-items:center;padding:var(--kritzel-split-button-padding, 8px);background-color:var(--kritzel-split-button-background-color, #ffffff);border-radius:var(--kritzel-split-button-border-radius, 12px);font-size:var(--kritzel-split-button-font-size, 14px)}.split-main-button:hover,.split-menu-button:hover{background-color:var(--kritzel-split-button-hover-background-color, hsl(0, 0%, 0%, 4.3%))}.split-main-button:focus,.split-menu-button:focus{background-color:var(--kritzel-split-button-hover-background-color, hsl(0, 0%, 0%, 4.3%))}.split-main-button{gap:var(--kritzel-split-button-gap, 4px)}.split-menu-button{border-left:none;justify-content:center}.split-divider{width:var(--kritzel-split-button-divider-width, 1px);height:24px;background-color:var(--kritzel-split-button-divider-background-color, hsl(0, 0%, 0%, 4.3%))}:disabled{pointer-events:none;opacity:0.5}";const qe=class{constructor(e){t(this,e),this.sizeChange=r(this,"sizeChange")}sizes=[4,6,8,12,16,24];selectedSize=null;sizeChange;handleSizeClick(t){this.selectedSize=t,this.sizeChange.emit(t)}render(){return e(i,{key:"f964d37a6cbfa48898ac066859165df1492535a9"},e("div",{key:"fed8ec5ddbe07d64beb151b22211fecdc0a278d1",class:"size-grid"},this.sizes.map((t=>e("div",{tabIndex:0,class:{"size-container":!0,selected:this.selectedSize===t},onClick:()=>this.handleSizeClick(t)},e("kritzel-color",{value:"var(--kritzel-global-text-primary)",size:t}))))))}};qe.style=":host{display:flex;align-items:flex-start;gap:0;padding:0;width:100%;box-sizing:border-box}.size-grid{width:100%;display:grid;grid-template-columns:repeat(6, 32px);gap:8px;justify-items:center}.size-container{display:flex;justify-content:center;align-items:center;width:32px;height:32px;border-radius:50%;cursor:var(--kritzel-global-pointer-cursor, pointer);border:2px solid transparent;box-sizing:border-box}.size-container:hover{background-color:var(--kritzel-stroke-size-hover-background-color, #ebebeb)}.size-container.selected{border-color:var(--kritzel-selection-border-color, #007AFF);background-color:var(--kritzel-stroke-size-selected-background-color, #ebebeb)}";const Xe=class{constructor(e){t(this,e),this.toolChange=r(this,"toolChange"),this.displayValuesChange=r(this,"displayValuesChange")}tool;handleToolChange(t,e){const i=at.getToolConfig(t);if(e&&t&&"shape"===i?.type){const r=at.getToolConfig(e);"shape"===r?.type&&[i.colorProperty,i.sizeProperty,i.opacityProperty,"fillColor"].forEach((i=>{i&&void 0!==e[i]&&(t[i]=e[i])}))}this.config=i,this.config&&(this.updatePalette(),this.currentOpacity=t[this.config.opacityProperty]??1,this.emitDisplayValues())}isExpanded=!1;theme;onThemeChange(){this.emitDisplayValues()}toolChange;displayValuesChange;config;palette=[];currentOpacity=1;updateTrigger=0;handleSelectionChange(){this.tool instanceof l&&(this.config=at.getToolConfig(this.tool),this.config&&(this.updatePalette(),this.currentOpacity=this.tool[this.config.opacityProperty]??1,this.emitDisplayValues()))}componentWillLoad(){this.config=at.getToolConfig(this.tool),this.config&&(this.updatePalette(),this.currentOpacity=this.tool[this.config.opacityProperty]??1,this.emitDisplayValues())}emitDisplayValues(){if(!this.config)return;const t=this.tool[this.config.sizeProperty],e={color:a.applyOpacity(this.tool[this.config.colorProperty],this.currentOpacity,this.theme),size:t};this.tool instanceof d&&(e.fontFamily=this.tool.fontFamily),this.displayValuesChange.emit(e)}updatePalette(){this.config&&(this.palette="none"===this.config.paletteSource?[]:this.tool.palette||[])}handleToggleExpand=()=>{this.isExpanded=!this.isExpanded};handleColorChange=t=>{if(this.tool[this.config.colorProperty]=t.detail,"shape"===this.config.type||"selection"===this.config.type){const e=this.tool;("string"==typeof e.fillColor?"transparent"===e.fillColor:"transparent"===e.fillColor.light&&"transparent"===e.fillColor.dark)||(e.fillColor=t.detail)}this.emitDisplayValues(),this.toolChange.emit(this.tool),this.updateTrigger++};handleSizeChange=t=>{this.tool[this.config.sizeProperty]=t.detail,this.emitDisplayValues(),this.toolChange.emit(this.tool),this.updateTrigger++};handleOpacityChange=t=>{this.tool[this.config.opacityProperty]=t.detail,this.currentOpacity=t.detail,this.emitDisplayValues(),this.toolChange.emit(this.tool)};handlePropertyChange=(t,e)=>{if("shape"!==this.config.type&&"selection"!==this.config.type||"fillColor"!==t)this.tool[t]=e,"fontFamily"===t&&this.emitDisplayValues();else{const t="filled"===e?this.tool[this.config.colorProperty]:{light:"transparent",dark:"transparent"};this.tool.fillColor=t,"filled"===e&&(this.tool[this.config.colorProperty]=t)}this.toolChange.emit(this.tool),this.updateTrigger++};getShapeFillValue(){const t=this.tool.fillColor;return("string"==typeof t?"transparent"===t:"transparent"===t.light&&"transparent"===t.dark)?"transparent":"filled"}renderControl(t){const i=this.tool[t.propertyName];switch(t.type){case"stroke-size":return e("kritzel-stroke-size",{key:t.type,selectedSize:i,onSizeChange:this.handleSizeChange});case"font-size":return e("kritzel-font-size",{key:t.type,selectedSize:i,fontFamily:this.tool.fontFamily,onSizeChange:this.handleSizeChange});case"line-endings":return e("kritzel-line-endings",{key:t.type,value:i,onValueChange:e=>this.handlePropertyChange(t.propertyName,e.detail)});case"shape-fill":return e("kritzel-shape-fill",{key:t.type,value:this.getShapeFillValue(),onValueChange:e=>this.handlePropertyChange(t.propertyName,e.detail)});case"font-family":return e("kritzel-font-family",{key:t.type,selectedFontFamily:i,onFontFamilyChange:e=>this.handlePropertyChange(t.propertyName,e.detail)});default:return null}}render(){if(!this.config)return null;const t=this.palette.length>6||"text"===this.config.type,r=this.palette.length>0,n=this.config.controls.find((t=>"stroke-size"===t.type||"font-size"===t.type)),o=this.config.controls.filter((t=>"stroke-size"!==t.type&&"font-size"!==t.type));return e(i,null,e("div",{style:{display:"flex",flexDirection:"row",gap:"8px",width:"100%"}},e("div",{style:{display:"flex",flexDirection:"column",gap:"12px",flex:"1"}},r&&e("kritzel-color-palette",{colors:this.palette,selectedColor:this.tool[this.config.colorProperty],isExpanded:this.isExpanded,isOpaque:!0,opacity:this.currentOpacity,theme:this.theme,onColorChange:this.handleColorChange}),n&&this.renderControl(n),e("kritzel-opacity-slider",{value:this.tool[this.config.opacityProperty],previewColor:this.tool[this.config.colorProperty],onValueChange:this.handleOpacityChange}),o.map((t=>[e("div",{class:"divider"}),this.renderControl(t)]))),t&&e("div",{style:{display:"flex",alignItems:"flex-start"}},e("button",{class:"expand-toggle",onClick:this.handleToggleExpand,title:this.isExpanded?"Collapse":"Expand"},e("kritzel-icon",{name:this.isExpanded?"chevron-up":"chevron-down"})))))}static get watchers(){return{tool:[{handleToolChange:0}],theme:[{onThemeChange:0}]}}};Xe.style=".expand-toggle{background:none;border:none;cursor:var(--kritzel-global-pointer-cursor, pointer);padding:0;margin:0;display:flex;align-items:center;justify-content:center;width:32px;height:32px;color:var(--kritzel-icon-color, currentColor);transition:transform 0.2s ease}.expand-toggle:hover{opacity:0.7}.expand-toggle:focus{outline:none}.expand-toggle:focus-visible{outline:2px solid var(--kritzel-focus-color, #007acc);outline-offset:2px}.expand-toggle:active{transform:scale(0.95)}.divider{height:1px;background-color:var(--kritzel-divider-color, #e0e0e0);margin:4px 0;width:100%}";const Ze=class{constructor(e){t(this,e),this.tooltipClosed=r(this,"tooltipClosed"),this.tooltipOpened=r(this,"tooltipOpened")}get host(){return n(this)}isVisible=!1;anchorElement;triggerElement;offsetY=24;tooltipClosed;tooltipOpened;positionX=0;positionY=0;handleOutsideClick(t){if(!this.isVisible)return;const e=t.composedPath(),i=e.some((t=>t===this.host)),r=this.triggerElement&&e.some((t=>t===this.triggerElement));i||r||this.close()}handleOutsidePointerDown(t){if(!this.isVisible)return;const e=t.composedPath(),i=e.some((t=>t===this.host)),r=this.triggerElement&&e.some((t=>t===this.triggerElement));i||r||(t.stopPropagation(),t.preventDefault(),this.close())}handleCloseAll(t){t.detail!==this.host&&this.close()}handleWindowResize(){this.calculateAdjustedPosition()}handleTriggerElementChange(t,e){e&&e.removeEventListener("click",this.handleTriggerClick),t&&t.addEventListener("click",this.handleTriggerClick)}handleVisibilityChange(t){t&&(this.calculateAdjustedPosition(),requestAnimationFrame((()=>{this.focusContent()})))}async open(){this.isVisible||(document.dispatchEvent(new CustomEvent("kritzelTooltipCloseAll",{detail:this.host})),this.isVisible=!0,this.tooltipOpened.emit())}async close(){this.isVisible&&(this.isVisible=!1,this.tooltipClosed.emit())}async toggle(){this.isVisible?this.close():this.open()}async focusContent(){const t=dt.getFocusableElements(this.host);t.length>0&&t[0].focus()}connectedCallback(){this.triggerElement&&this.triggerElement.addEventListener("click",this.handleTriggerClick)}componentDidLoad(){this.triggerElement&&this.triggerElement.addEventListener("click",this.handleTriggerClick)}componentWillLoad(){this.calculateAdjustedPosition()}componentWillUpdate(){this.calculateAdjustedPosition()}disconnectedCallback(){this.triggerElement&&this.triggerElement.removeEventListener("click",this.handleTriggerClick)}handleTriggerClick=t=>{t.stopPropagation(),this.toggle()};calculateAdjustedPosition(){if(this.isVisible&&this.anchorElement){const t=this.anchorElement.getBoundingClientRect(),e=this.host.shadowRoot?.querySelector(".tooltip-content"),i=e?.getBoundingClientRect(),r=i?.width||0,n=12,o=window.innerWidth-r-n;this.positionX=Math.max(n,Math.min(t.left+t.width/2-r/2,o)),this.positionY=window.innerHeight-t.top+this.offsetY}}render(){return e(i,{key:"647f4d837fc06a3b5dca8896383c1a92ef7c5a3d",style:{position:"fixed",zIndex:"9999",transition:"opacity 0.3s ease-in-out, transform 0.3s ease-in-out",visibility:this.isVisible?"visible":"hidden",left:`${this.positionX}px`,bottom:`${this.positionY}px`}},e("div",{key:"41b32207d1e9f84c85c054a8aae4727b7df05d62",class:"tooltip-content",onClick:t=>t.stopPropagation(),onPointerDown:t=>t.stopPropagation(),onMouseDown:t=>t.stopPropagation()},e("slot",{key:"c164d76762957e60d904458d7a34936944d02eae"})))}static get watchers(){return{triggerElement:[{handleTriggerElementChange:0}],isVisible:[{handleVisibilityChange:0}]}}};Ze.style=":host{width:auto}.tooltip-content{position:relative;padding:8px 12px;border-radius:4px;width:fit-content;background-color:var(--kritzel-tooltip-background-color, #ffffff);color:var(--kritzel-tooltip-color, #000000);padding:var(--kritzel-tooltip-padding, 12px);border:var(--kritzel-tooltip-border, 1px solid #ebebeb);border-radius:var(--kritzel-tooltip-border-radius, 16px);white-space:nowrap;box-shadow:var(--kritzel-tooltip-box-shadow, 0 1px 6px rgba(0, 0, 0, 0.12))}";const Je=class{constructor(e){t(this,e),this.undo=r(this,"undo"),this.redo=r(this,"redo"),this.delete=r(this,"delete")}undoState=null;undo;redo;delete;handleUndo(t){t.cancelable&&(t.preventDefault(),t.stopPropagation(),this.undo.emit())}handleRedo(t){t.preventDefault(),t.stopPropagation(),this.redo.emit()}render(){return e(i,{key:"b49f6db6c0e574dc8a5a733c749ecda6f24f9d25"},e("button",{key:"f65be4fff352b55087f9cb880b9139802b4969e6",class:"utility-button","data-testid":"utility-undo",disabled:!this.undoState?.canUndo,onClick:t=>this.handleUndo(t)},e("kritzel-icon",{key:"d58906a4f105923237a98fe2e6b16a53dcccc3f6",name:"undo"})),e("button",{key:"2b7cf2235902920d6b18fe76d0ba2d1d70e4b2c8",class:"utility-button","data-testid":"utility-redo",disabled:!this.undoState?.canRedo,onClick:t=>this.handleRedo(t)},e("kritzel-icon",{key:"9588ded274449358024e16e8783d30ef451a3a7c",name:"redo"})),e("div",{key:"6ab6db05e2ec35aa59524c41ccb7b339819c9d14",class:"utility-separator"}),e("button",{key:"0eb06eebbda95cebc4ea932b9ec45b2c06324f80",class:"utility-button","data-testid":"utility-delete",onClick:()=>this.delete.emit()},e("kritzel-icon",{key:"10b51caad06e0a7489c6ef7155073891edad4b63",name:"delete"})))}};Je.style=":host{display:flex;flex-direction:row;align-items:center;padding:4px;gap:8px;border-top-left-radius:12px;border-top-right-radius:12px;background-color:var(--kritzel-utility-panel-background-color, #e2e2e2);width:fit-content;user-select:none;z-index:10000}.utility-button{display:flex;justify-content:center;align-items:center;width:28px;height:28px;padding:8px 4px;border:none;background:none;cursor:var(--kritzel-global-pointer-cursor, pointer);color:var(--kritzel-utility-panel-button-color, #333333);--kritzel-icon-color:var(--kritzel-utility-panel-button-color, #333333);-webkit-tap-highlight-color:transparent;border-radius:var(--kritzel-utility-panel-button-border-radius, 8px)}.utility-button:hover,.utility-button:focus-visible{background-color:var(--kritzel-utility-panel-button-hover-background-color, hsl(0, 0%, 0%, 4.3%))}.utility-button:disabled{opacity:0.4;cursor:not-allowed;pointer-events:none}.utility-separator{width:1px;height:16px;background-color:var(--kritzel-utility-panel-separator-color, hsl(0, 0%, 0%, 8%))}";const Qe=class{constructor(e){t(this,e),this.isWorkspaceManagerReady=r(this,"isWorkspaceManagerReady"),this.workspaceChange=r(this,"workspaceChange")}get host(){return n(this)}visible=!1;activeWorkspace;workspaces=[];isWorkspaceManagerReady;workspaceChange;childMenuAnchor=null;openChildMenuItem=null;newWorkspace=null;editingItemId=null;handleWheel(t){t.ctrlKey&&t.preventDefault()}kritzelEngineRef=null;splitButtonRef;get sortedWorkspaces(){return[this.newWorkspace,...this.workspaces].filter((t=>null!=t)).sort(((t,e)=>e.createdAt.getTime()-t.createdAt.getTime()))}async componentWillLoad(){await this.initializeEngine(),this.isWorkspaceManagerReady.emit()}async initializeEngine(){await customElements.whenDefined("kritzel-engine");const t=this.host.closest("kritzel-editor");this.kritzelEngineRef=t?.querySelector("kritzel-engine")??null,this.kritzelEngineRef||console.warn("kritzel-engine not found in kritzel-editor.")}async select(t,e){this.editingItemId||(t.action?t.action(t,e):this.workspaceChange.emit(t.value))}async add(){await this.splitButtonRef.open(),this.newWorkspace=new _(V.generateUUID(),"New Workspace"),this.editingItemId=this.newWorkspace.id}edit(t){this.openChildMenuItem=null,this.childMenuAnchor=null,requestAnimationFrame((()=>{this.editingItemId=t.id}))}async save(t){if(this.newWorkspace)this.newWorkspace.name=t.label,await(this.kritzelEngineRef?.createWorkspace(this.newWorkspace)),this.workspaceChange.emit(this.newWorkspace);else{const e=t.value;e.name=t.label,await(this.kritzelEngineRef?.updateWorkspace(e))}this.editingItemId=null,this.newWorkspace=null}cancel(){this.newWorkspace=null,this.editingItemId=null}async delete(t){this.openChildMenuItem=null,this.childMenuAnchor=null,await(this.kritzelEngineRef?.deleteWorkspace(t.value)),t.value.id===this.activeWorkspace?.id&&(this.activeWorkspace=this.sortedWorkspaces.find((e=>e.id!==t.value.id))||null,this.workspaceChange.emit(this.activeWorkspace)),await this.splitButtonRef.focusMenu()}toggleChildMenu(t,e){this.openChildMenuItem=t,this.childMenuAnchor=e}closeChildMenu(){this.openChildMenuItem=null,this.childMenuAnchor=null}handleMenuOpen(){}handleMenuClose(){this.cancel(),this.closeChildMenu()}render(){const t=this.sortedWorkspaces.sort(((t,e)=>e.createdAt.getTime()-t.createdAt.getTime())).filter((t=>null!==t)).map((t=>({id:t.id,label:t.name,icon:t.isPublic?"users-round":void 0,iconTooltip:t.isPublic?"Shared workspace":void 0,value:t,isEditing:this.editingItemId===t.id,isSelected:this.activeWorkspace?.id===t.id,isNewItem:this.newWorkspace?.id===t.id,isChildMenuOpen:this.openChildMenuItem?.id===t.id,childMenuAnchor:this.openChildMenuItem?.id===t.id?this.childMenuAnchor:null,children:[{id:`${t.id}-rename`,label:"Rename",value:"rename",action:(t,e)=>this.edit(e)},{id:`${t.id}-delete`,label:"Delete",value:"delete",isDisabled:this.sortedWorkspaces.length<=1,action:(t,e)=>this.delete(e)}]})));return e(i,null,e("div",{class:{manager:!0,visible:this.visible}},e("kritzel-split-button",{ref:t=>this.splitButtonRef=t,items:t,mainButtonDisabled:null!=this.editingItemId,onMainButtonClick:()=>this.add(),onItemSelect:t=>this.select(t.detail.item,t.detail.parent),onItemToggleChildMenu:t=>this.toggleChildMenu(t.detail.item,t.detail.childMenuAnchor),onItemSave:t=>this.save(t.detail),onItemCancel:()=>this.cancel(),onItemCloseChildMenu:()=>this.closeChildMenu(),onMenuOpen:()=>this.handleMenuOpen(),onMenuClose:()=>this.handleMenuClose()})))}};Qe.style=":host{display:flex;flex-direction:column;z-index:1}.manager{opacity:0;pointer-events:none;transition:opacity 0.2s ease-out}.manager.visible{opacity:1;pointer-events:auto}";export{Q as kritzel_active_users,tt as kritzel_avatar,et as kritzel_awareness_cursors,it as kritzel_back_to_content,rt as kritzel_button,nt as kritzel_color,ot as kritzel_color_palette,st as kritzel_context_menu,lt as kritzel_controls,ct as kritzel_current_user,ht as kritzel_current_user_dialog,ut as kritzel_cursor_trail,ft as kritzel_dialog,pt as kritzel_dropdown,mt as kritzel_editor,ye as kritzel_engine,we as kritzel_export,xe as kritzel_font,ze as kritzel_font_family,Ce as kritzel_font_size,Se as kritzel_icon,Ie as kritzel_input,$e as kritzel_line_endings,Me as kritzel_login_dialog,je as kritzel_master_detail,Te as kritzel_menu,Ae as kritzel_menu_item,_e as kritzel_more_menu,Oe as kritzel_numeric_input,Ee as kritzel_opacity_slider,De as kritzel_pill_tabs,Fe as kritzel_portal,Ne as kritzel_settings,Ke as kritzel_shape_fill,He as kritzel_share_dialog,Ge as kritzel_slide_toggle,Ye as kritzel_split_button,qe as kritzel_stroke_size,Xe as kritzel_tool_config,Ze as kritzel_tooltip,Je as kritzel_utility_panel,Qe as kritzel_workspace_manager}
|