kritzel-stencil 0.2.5 → 0.2.6

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.
@@ -6,4 +6,4 @@ 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
6
6
  * Released under MIT license <https://lodash.com/license>
7
7
  * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
8
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;_inTransaction=!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:Number.MAX_SAFE_INTEGER,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){if(this._ydoc){this._inTransaction=!0;try{this._ydoc.transact(t,"local")}finally{this._inTransaction=!1}}}stopUndoCapturing(){this.markUndoBoundary()}markUndoBoundary(){this._inTransaction||this._undoManager?.stopCapturing()}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.markUndoBoundary(),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.markUndoBoundary(),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);if(0!==e.length){this.markUndoBoundary();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&&(this._store.objects.stopUndoCapturing(),this._store.objects.transaction((()=>{t.objects.forEach((t=>this.removeObject(t))),this.removeSelectionGroup()})),this._store.objects.stopUndoCapturing(),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((()=>{const t=(e,i)=>{if(0===e._pendingChildren.length)return;const n=e._pendingChildren;e._pendingChildren=[],n.forEach(((e,n)=>{e.workspaceId!==r.id&&(e.workspaceId=r.id),e.updatePosition(e.translateX+h,e.translateY+u),e.zIndex=i+n+1,G.isInstanceOf(e,"KritzelGroup")&&t(e,e.zIndex),this.addObject(e)})),e.finalize()};i.forEach(((e,i)=>{e.workspaceId!==r.id&&(e.workspaceId=r.id),e.updatePosition(e.translateX+h,e.translateY+u),e.zIndex=p+i,G.isInstanceOf(e,"KritzelGroup")&&t(e,e.zIndex),this.addObject(e),d.addOrRemove(e)})),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,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")}}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){if(this.core.store.isDisabled)return;const e=this.core.store.state.pointers.has(t.pointerId);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(),e&&(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){const e=new Map,i=[],r=t=>{if(0===t._pendingChildren.length)return;const n=t._pendingChildren;t._pendingChildren=[],t.childIds=[],n.forEach((n=>{const o=n.id;n.id=n.generateId(),n._core=this.core,n.scale=this.core.store.state.scale,n.zIndex=this.core.store.currentZIndex,n.workspaceId=this.core.store.state.activeWorkspace.id,e.set(o,n.id),t.childIds.push(n.id),i.push(n),G.isInstanceOf(n,"KritzelGroup")&&r(n)}))};r(t),i.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)}))})),i.forEach((t=>{this.core.addObject(t)})),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")&&(()=>{const r=(i.markedForRemoval?.5:1)*i.opacity;return 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,pointerEvents:i.markedForRemoval?"none":"auto",overflow:"visible"},viewBox:i?.viewBox},e("path",{d:i?.d,fill:a.applyOpacity(i.fill,r,t),stroke:a.applyOpacity(i?.stroke,r,t),"shape-rendering":i.isLowRes()?"optimizeSpeed":"auto"}))})(),G.isInstanceOf(i,"KritzelLine")&&(()=>{const r=(i.markedForRemoval?.5:1)*i.opacity;return 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,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:a.applyOpacity(i.getArrowFill("start"),r),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:a.applyOpacity(i.getArrowFill("end"),r),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.applyOpacity(i?.stroke,r,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")&&(()=>{const r=(i.markedForRemoval?.5:1)*i.opacity;return 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,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.applyOpacity(i.fillColor,r,t),stroke:a.applyOpacity(i.strokeColor,r,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-engine-loading-overlay-background, rgba(255, 255, 255, 0.6));color:var(--kritzel-engine-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-engine-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-engine-loading-overlay-spinner-color, #cccccc);border-top-color:var(--kritzel-engine-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:"5178e66f75b94697c771e2dc6fe7ce317e21cd1a"},e("kritzel-dialog",{key:"01aae6955be6828945b20e8a8a4d7c49eb92b2e2",isOpen:this.isDialogOpen,dialogTitle:"Export",closable:!0,onDialogClose:this.closeDialog},e("div",{key:"57c6f6de2917fb51201d737c4d0e1877f5671466",class:"export-content"},e("kritzel-pill-tabs",{key:"800b8c058078ba1bba06b5edbaf370c4fa3c6806",tabs:this.tabs,value:this.activeTab,onValueChange:this.handleTabChange}),"viewport"===this.activeTab&&this.renderViewportExport(),"workspace"===this.activeTab&&this.renderWorkspaceExport(),e("button",{key:"99fb3b3d8dc42fdb47a3110e8403dde4e508e6cd",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:"1a664868b840030a773f61c2a0f4388dfb014675"},e("kritzel-dialog",{key:"09ece6fb5949fc8b204f29cd931c583e525590e1",dialogTitle:this.dialogTitle,isOpen:this.isDialogOpen,onDialogClose:this.closeDialog,size:"small"},e("div",{key:"57218d7762734929691b82700c31922f5a4991c8",class:"login-content"},this.subtitle&&e("p",{key:"9ee071786f393857cd6a666e395526a139359d60",class:"login-subtitle"},this.subtitle),e("div",{key:"a487687345aabcfb55976437ddc85feb464f0cae",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%}.menu-item-content span{display:flex;align-items:center;line-height:0}.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:"0e12ffc8c72566ec92080e6a19bd1d929795bef9",class:{mobile:this.isTouchDevice}},e("div",{key:"cc73b51c5aa39522a7ab7ec23d5c0a2732ed7acc",class:{"more-menu-wrapper":!0,visible:this.visible}},e("button",{key:"c35b8c7aa56e5e0e2773fed9fbbbead0b6b01a71",class:"more-menu-button",onClick:this.toggleMenu},e("kritzel-icon",{key:"8b3261da5a10371a17b2562b71fde48dd0ba8ccd",name:this.icon,size:this.iconSize})),e("kritzel-portal",{key:"be4a42061f27bbca3d435dec8e4dd25fc78febb0",anchor:this.menuAnchor,offsetY:this.offsetY,onClose:this.closeMenu},e("kritzel-menu",{key:"763043f4d02819097396ce1baa85f398695e38b5",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()))}handleOutsidePointerDown(t){if(!this.portal)return;if(this.lastAddedPortal!==this.portal)return;const e=t.composedPath(),i=e.some((t=>t===this.host)),r=this.anchor&&e.some((t=>t===this.anchor));i||r||(t.stopPropagation(),t.preventDefault(),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:"dcd8e6f3787c713012aeb6436bf63f2f4930c39e",style:{display:this.anchor?"block":"none"}},e("slot",{key:"830f51521a77f0a28471026494323e14ab4f9f9a"}))}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.5"),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:"78a4eb80f2a4d9e7ef67d06bb39137dbde3a3301"},e("kritzel-dialog",{key:"1adf437125186758f75dc085db9a4e0c572fccd9",isOpen:this.isDialogOpen,dialogTitle:"Settings",size:"large",onDialogClose:this.closeDialog},e("kritzel-master-detail",{key:"68ed27f5c9c03589d0444c02ff0524dfcaa053a3",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:"bd58f146337b3eca96ca34408a3d30621f01765a"},e("kritzel-dialog",{key:"c152f4ec5739a18b265f9a8b161ec8501c1a053b",dialogTitle:"Share Workspace",isOpen:this.isDialogOpen,onDialogClose:this.closeDialog,size:"small"},e("div",{key:"2810061b1c99e4f4644342453de693e1cddf9a27",class:"share-content"},e("div",{key:"bc56de53fd6136c6867018af24019383094cab0d",class:"share-section"},e("div",{key:"43464ffd61e5a19653cc081e823f01c0eb17e454",class:"share-row"},e("div",{key:"ed83ea6684695d09dc6af82b3367fbbff6e4c7e2",class:"share-label-group"},e("label",{key:"fe2eaf501dd80ad0b8d83f93a2dcdd18bc093d3b",class:"share-label"},"Link sharing"),e("p",{key:"738f1a6afc0421380164b9d270920631cefdfd78",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:"60f0200ea8f9c207cd5ee76f5a86f82707bb724b",checked:this.internalIsPublic,onCheckedChange:this.handleToggleChange,label:"Enable link sharing"}))),this.internalIsPublic&&e("div",{key:"83212a2a996b85996eee119d5535203f77d3c8dd",class:"share-section"},e("div",{key:"297031b5aef2018f7aa33c32fd0f8c82f1ddb4cb",class:"share-url-container"},e("input",{key:"467cca4a8c31b75daa82670f64b562730c241f52",type:"text",class:"share-url-input",value:this.getShareUrl(),readOnly:!0,onClick:t=>t.target.select()}),e("button",{key:"fdc0f490339cb7050fb020cb1e83e51f6374b183",class:{"copy-button":!0,"copy-success":this.copySuccess},onClick:this.handleCopyUrl,title:this.copySuccess?"Copied!":"Copy link"},e("kritzel-icon",{key:"5ff1a76d7977c75ea7bc8c339bdf515ba102e511",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:"f800ea5843cf73ae132b56396ad05d664043f789"},e("button",{key:"d5dd4dc6e91c106eced7551c02d5f12a915b1d22",class:"utility-button","data-testid":"utility-undo",disabled:!this.undoState?.canUndo,onClick:t=>this.handleUndo(t)},e("kritzel-icon",{key:"64ac3c8f118c991b50dc99e70d4b952fc759c958",name:"undo"})),e("button",{key:"97a8d694fd999eb505fdcdb532d4476ce369e60d",class:"utility-button","data-testid":"utility-redo",disabled:!this.undoState?.canRedo,onClick:t=>this.handleRedo(t)},e("kritzel-icon",{key:"ba22d5c6b246967b00112dc2efeb26920187d88f",name:"redo"})),e("div",{key:"a4aa6a3202640742826d2217f2bbae9ebd2b84da",class:"utility-separator"}),e("button",{key:"1de2a896a6a70c22f9fa16a21af10f07f4b0303a",class:"utility-button","data-testid":"utility-delete",onClick:()=>this.delete.emit()},e("kritzel-icon",{key:"202612645c1a3e8ee7e4cc01a0305d4e673874e4",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}
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;_inTransaction=!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:Number.MAX_SAFE_INTEGER,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){if(this._ydoc){this._inTransaction=!0;try{this._ydoc.transact(t,"local")}finally{this._inTransaction=!1}}}stopUndoCapturing(){this.markUndoBoundary()}markUndoBoundary(){this._inTransaction||this._undoManager?.stopCapturing()}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.markUndoBoundary(),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.markUndoBoundary(),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);if(0!==e.length){this.markUndoBoundary();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&&(this._store.objects.stopUndoCapturing(),this._store.objects.transaction((()=>{t.objects.forEach((t=>this.removeObject(t))),this.removeSelectionGroup()})),this._store.objects.stopUndoCapturing(),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((()=>{const t=(e,i)=>{if(0===e._pendingChildren.length)return;const n=e._pendingChildren;e._pendingChildren=[],n.forEach(((e,n)=>{e.workspaceId!==r.id&&(e.workspaceId=r.id),e.updatePosition(e.translateX+h,e.translateY+u),e.zIndex=i+n+1,G.isInstanceOf(e,"KritzelGroup")&&t(e,e.zIndex),this.addObject(e)})),e.finalize()};i.forEach(((e,i)=>{e.workspaceId!==r.id&&(e.workspaceId=r.id),e.updatePosition(e.translateX+h,e.translateY+u),e.zIndex=p+i,G.isInstanceOf(e,"KritzelGroup")&&t(e,e.zIndex),this.addObject(e),d.addOrRemove(e)})),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,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")}}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){if(this.core.store.isDisabled)return;const e=this.core.store.state.pointers.has(t.pointerId);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(),e&&(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){const e=new Map,i=[],r=t=>{if(0===t._pendingChildren.length)return;const n=t._pendingChildren;t._pendingChildren=[],t.childIds=[],n.forEach((n=>{const o=n.id;n.id=n.generateId(),n._core=this.core,n.scale=this.core.store.state.scale,n.zIndex=this.core.store.currentZIndex,n.workspaceId=this.core.store.state.activeWorkspace.id,e.set(o,n.id),t.childIds.push(n.id),i.push(n),G.isInstanceOf(n,"KritzelGroup")&&r(n)}))};r(t),i.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)}))})),i.forEach((t=>{this.core.addObject(t)})),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")&&(()=>{const r=(i.markedForRemoval?.5:1)*i.opacity;return 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,pointerEvents:i.markedForRemoval?"none":"auto",overflow:"visible"},viewBox:i?.viewBox},e("path",{d:i?.d,fill:a.applyOpacity(i.fill,r,t),stroke:a.applyOpacity(i?.stroke,r,t),"shape-rendering":i.isLowRes()?"optimizeSpeed":"auto"}))})(),G.isInstanceOf(i,"KritzelLine")&&(()=>{const r=(i.markedForRemoval?.5:1)*i.opacity;return 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,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:a.applyOpacity(i.getArrowFill("start"),r),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:a.applyOpacity(i.getArrowFill("end"),r),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.applyOpacity(i?.stroke,r,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")&&(()=>{const r=(i.markedForRemoval?.5:1)*i.opacity,n=a.resolveThemeColor(i.fillColor,t),o=a.resolveThemeColor(i.strokeColor,t),s=!!n&&"transparent"!==n&&o===n;return 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,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.applyOpacity(i.fillColor,r,t),stroke:s?"none":a.applyOpacity(i.strokeColor,r,t),"stroke-width":s?0: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-engine-loading-overlay-background, rgba(255, 255, 255, 0.6));color:var(--kritzel-engine-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-engine-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-engine-loading-overlay-spinner-color, #cccccc);border-top-color:var(--kritzel-engine-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:"5178e66f75b94697c771e2dc6fe7ce317e21cd1a"},e("kritzel-dialog",{key:"01aae6955be6828945b20e8a8a4d7c49eb92b2e2",isOpen:this.isDialogOpen,dialogTitle:"Export",closable:!0,onDialogClose:this.closeDialog},e("div",{key:"57c6f6de2917fb51201d737c4d0e1877f5671466",class:"export-content"},e("kritzel-pill-tabs",{key:"800b8c058078ba1bba06b5edbaf370c4fa3c6806",tabs:this.tabs,value:this.activeTab,onValueChange:this.handleTabChange}),"viewport"===this.activeTab&&this.renderViewportExport(),"workspace"===this.activeTab&&this.renderWorkspaceExport(),e("button",{key:"99fb3b3d8dc42fdb47a3110e8403dde4e508e6cd",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:"1a664868b840030a773f61c2a0f4388dfb014675"},e("kritzel-dialog",{key:"09ece6fb5949fc8b204f29cd931c583e525590e1",dialogTitle:this.dialogTitle,isOpen:this.isDialogOpen,onDialogClose:this.closeDialog,size:"small"},e("div",{key:"57218d7762734929691b82700c31922f5a4991c8",class:"login-content"},this.subtitle&&e("p",{key:"9ee071786f393857cd6a666e395526a139359d60",class:"login-subtitle"},this.subtitle),e("div",{key:"a487687345aabcfb55976437ddc85feb464f0cae",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%}.menu-item-content span{display:flex;align-items:center;line-height:0}.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:"0e12ffc8c72566ec92080e6a19bd1d929795bef9",class:{mobile:this.isTouchDevice}},e("div",{key:"cc73b51c5aa39522a7ab7ec23d5c0a2732ed7acc",class:{"more-menu-wrapper":!0,visible:this.visible}},e("button",{key:"c35b8c7aa56e5e0e2773fed9fbbbead0b6b01a71",class:"more-menu-button",onClick:this.toggleMenu},e("kritzel-icon",{key:"8b3261da5a10371a17b2562b71fde48dd0ba8ccd",name:this.icon,size:this.iconSize})),e("kritzel-portal",{key:"be4a42061f27bbca3d435dec8e4dd25fc78febb0",anchor:this.menuAnchor,offsetY:this.offsetY,onClose:this.closeMenu},e("kritzel-menu",{key:"763043f4d02819097396ce1baa85f398695e38b5",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()))}handleOutsidePointerDown(t){if(!this.portal)return;if(this.lastAddedPortal!==this.portal)return;const e=t.composedPath(),i=e.some((t=>t===this.host)),r=this.anchor&&e.some((t=>t===this.anchor));i||r||(t.stopPropagation(),t.preventDefault(),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:"dcd8e6f3787c713012aeb6436bf63f2f4930c39e",style:{display:this.anchor?"block":"none"}},e("slot",{key:"830f51521a77f0a28471026494323e14ab4f9f9a"}))}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.6"),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:"78a4eb80f2a4d9e7ef67d06bb39137dbde3a3301"},e("kritzel-dialog",{key:"1adf437125186758f75dc085db9a4e0c572fccd9",isOpen:this.isDialogOpen,dialogTitle:"Settings",size:"large",onDialogClose:this.closeDialog},e("kritzel-master-detail",{key:"68ed27f5c9c03589d0444c02ff0524dfcaa053a3",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:"bd58f146337b3eca96ca34408a3d30621f01765a"},e("kritzel-dialog",{key:"c152f4ec5739a18b265f9a8b161ec8501c1a053b",dialogTitle:"Share Workspace",isOpen:this.isDialogOpen,onDialogClose:this.closeDialog,size:"small"},e("div",{key:"2810061b1c99e4f4644342453de693e1cddf9a27",class:"share-content"},e("div",{key:"bc56de53fd6136c6867018af24019383094cab0d",class:"share-section"},e("div",{key:"43464ffd61e5a19653cc081e823f01c0eb17e454",class:"share-row"},e("div",{key:"ed83ea6684695d09dc6af82b3367fbbff6e4c7e2",class:"share-label-group"},e("label",{key:"fe2eaf501dd80ad0b8d83f93a2dcdd18bc093d3b",class:"share-label"},"Link sharing"),e("p",{key:"738f1a6afc0421380164b9d270920631cefdfd78",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:"60f0200ea8f9c207cd5ee76f5a86f82707bb724b",checked:this.internalIsPublic,onCheckedChange:this.handleToggleChange,label:"Enable link sharing"}))),this.internalIsPublic&&e("div",{key:"83212a2a996b85996eee119d5535203f77d3c8dd",class:"share-section"},e("div",{key:"297031b5aef2018f7aa33c32fd0f8c82f1ddb4cb",class:"share-url-container"},e("input",{key:"467cca4a8c31b75daa82670f64b562730c241f52",type:"text",class:"share-url-input",value:this.getShareUrl(),readOnly:!0,onClick:t=>t.target.select()}),e("button",{key:"fdc0f490339cb7050fb020cb1e83e51f6374b183",class:{"copy-button":!0,"copy-success":this.copySuccess},onClick:this.handleCopyUrl,title:this.copySuccess?"Copied!":"Copy link"},e("kritzel-icon",{key:"5ff1a76d7977c75ea7bc8c339bdf515ba102e511",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:"f800ea5843cf73ae132b56396ad05d664043f789"},e("button",{key:"d5dd4dc6e91c106eced7551c02d5f12a915b1d22",class:"utility-button","data-testid":"utility-undo",disabled:!this.undoState?.canUndo,onClick:t=>this.handleUndo(t)},e("kritzel-icon",{key:"64ac3c8f118c991b50dc99e70d4b952fc759c958",name:"undo"})),e("button",{key:"97a8d694fd999eb505fdcdb532d4476ce369e60d",class:"utility-button","data-testid":"utility-redo",disabled:!this.undoState?.canRedo,onClick:t=>this.handleRedo(t)},e("kritzel-icon",{key:"ba22d5c6b246967b00112dc2efeb26920187d88f",name:"redo"})),e("div",{key:"a4aa6a3202640742826d2217f2bbae9ebd2b84da",class:"utility-separator"}),e("button",{key:"1de2a896a6a70c22f9fa16a21af10f07f4b0303a",class:"utility-button","data-testid":"utility-delete",onClick:()=>this.delete.emit()},e("kritzel-icon",{key:"202612645c1a3e8ee7e4cc01a0305d4e673874e4",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}