kritzel-stencil 0.3.40 → 0.3.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/kritzel-active-users_46.cjs.entry.js +1 -1
- package/dist/collection/constants/version.js +1 -1
- package/dist/components/kritzel-editor.js +1 -1
- package/dist/components/kritzel-settings.js +1 -1
- package/dist/components/{p-D1CUxumk.js → p-DCW7TkyE.js} +1 -1
- package/dist/esm/kritzel-active-users_46.entry.js +1 -1
- package/dist/stencil/{p-7776fe80.entry.js → p-0f31dc8e.entry.js} +1 -1
- package/dist/stencil/stencil.esm.js +1 -1
- package/dist/types/constants/version.d.ts +1 -1
- package/package.json +1 -1
|
@@ -6,4 +6,4 @@ import{r as t,h as e,H as i,c as n,g as r}from"./p-Dhio9uis.js";import{c as o,e
|
|
|
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 jt{_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=Tt.debounce((()=>{this._core.updateWorkspaceViewport(this._core.store.state.translateX,this._core.store.state.translateY,this._core.store.state.scale)}),300),this._debounceEndScaling=Tt.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:n,viewportWidth:r,viewportHeight:o}=i,{viewportBoundaryLeft:s,viewportBoundaryRight:a,viewportBoundaryTop:l,viewportBoundaryBottom:c}=i,h=-s*n,u=r-a*n,d=-l*n,f=o-c*n;let p=t,g=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)?g=Math.max(f,Math.min(d,e)):Number.isFinite(f)?g=Math.max(f,e):Number.isFinite(d)&&(g=Math.min(d,e)),{translateX:p,translateY:g}}getEffectiveMinScale(){const t=this._core.store.state,{viewportWidth:e,viewportHeight:i,scaleMin:n}=t,{viewportBoundaryLeft:r,viewportBoundaryRight:o,viewportBoundaryTop:s,viewportBoundaryBottom:a}=t,l=o-r,c=a-s;if(!Number.isFinite(l)||!Number.isFinite(c))return n;const h=Math.max(l>0?e/l:n,c>0?i/c:n);return Math.max(n,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===u.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 A)),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,n=e[0].clientY-this._core.store.offsetY,r=e[1].clientX-this._core.store.offsetX,o=e[1].clientY-this._core.store.offsetY;this.initialTouchDistance=Math.sqrt(Math.pow(i-r,2)+Math.pow(n-o,2)),this.startX=(i+r)/2,this.startY=(n+o)/2,this._core.rerender()}}}handlePointerMove(t){if("mouse"===t.pointerType){const e=this._core.store.host.getBoundingClientRect(),i=t.clientX-e.left,n=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=(n-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+(n-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=n,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,n=t.clientY-e.top,r=Array.from(this._core.store.state.pointers.values());if(this._core.store.state.isScaling||r.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=(n-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)>=jt.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===r.length){const t=r[0].clientX-this._core.store.offsetX,e=r[0].clientY-this._core.store.offsetY,i=r[1].clientX-this._core.store.offsetX,n=r[1].clientY-this._core.store.offsetY,o=Math.sqrt(Math.pow(t-i,2)+Math.pow(e-n,2)),s=(t+i)/2,a=(e+n)/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 n=this._core.store.state,r=Math.min(n.scaleMax,Math.max(this.getEffectiveMinScale(),i));this.animateViewportTo(n.viewportWidth/2-t*r,n.viewportHeight/2-e*r,r)}panTo(t,e){this.setViewport(t,e,this._core.store.state.scale)}zoomTo(t,e,i){const n=this._core.store.state;void 0!==e&&void 0!==i?this.setViewport(e,i,t):this.setViewport((n.viewportWidth/2-n.translateX)/n.scale,(n.viewportHeight/2-n.translateY)/n.scale,t)}zoomIn(t,e){this.animateZoomAroundViewportCenter(t,e)}zoomOut(t,e){this.animateZoomAroundViewportCenter(1/t,e)}animateZoomAroundViewportCenter(t,e){this.cancelViewportAnimation();const i=this._core.store.state,n=i.scale,r=this.getEffectiveMinScale(),o=Math.min(i.scaleMax,Math.max(r,n*t)),s=i.viewportWidth/2,a=i.viewportHeight/2,l=(s-i.translateX)/n,c=(a-i.translateY)/n;if(o===n||e<=0)return this.applyZoomAroundCenter(o,s,a,l,c),i.isScaling=!0,this._core.rerender(),this._debounceUpdate(),void this._debounceEndScaling();const h=performance.now();i.isScaling=!0;const u=t=>{const r=Math.min((t-h)/e,1),d=r<.5?4*r*r*r:1-Math.pow(-2*r+2,3)/2;this.applyZoomAroundCenter(n+(o-n)*d,s,a,l,c),this._core.rerender(),r<1?this._animationFrameId=requestAnimationFrame(u):(this._animationFrameId=null,i.isScaling=!1,this._core.rerender(),this._debounceUpdate())};this._animationFrameId=requestAnimationFrame(u)}applyZoomAroundCenter(t,e,i,n,r){const o=this._core.store.state;o.scale=t;const s=this.clampTranslate(e-n*t,i-r*t);o.translateX=s.translateX,o.translateY=s.translateY,o.hasViewportChanged=!0}centerInViewport(t){const{scale:e,viewportWidth:i,viewportHeight:n}=this._core.store.state,{x:r,y:o,width:s,height:a}=t.rotatedBoundingBox,l=this.clampTranslate(i/2-(r+s/2)*e,n/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)}centerFitInViewportIfNeeded(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());i<this._core.store.state.scale&&(this._core.store.state.scale=i),this.centerInViewport(t)}fitInViewportIfNeeded(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());i<this._core.store.state.scale&&(this._core.store.state.scale=i,this.centerInViewport(t))}bringIntoViewIfNeeded(t){const{scale:e,translateX:i,translateY:n,viewportWidth:r,viewportHeight:o}=this._core.store.state,s=t.rotatedBoundingBox;if(s.x*e+i>=0&&s.y*e+n>=0&&(s.x+s.width)*e+i<=r&&(s.y+s.height)*e+n<=o)return;const a=Math.min(r/(1.1*s.width),o/(1.1*s.height),this._core.store.state.scaleMax),l=Math.max(a,this.getEffectiveMinScale()),c=Math.min(l,e),h=this.clampTranslate(r/2-(s.x+s.width/2)*c,o/2-(s.y+s.height/2)*c);this.animateViewportTo(h.translateX,h.translateY,c)}handleZoom(t){this._core.store.state.isScaling=!0;const e=this._core.store.host.getBoundingClientRect(),i=t.clientX-e.left,n=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=(n-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 r=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*r)),a=s/this._core.store.state.scale,l=(i-this._core.store.state.translateX)*(a-1),c=(n-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,n=150){this.cancelViewportAnimation();const r=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)/n,1),u=1-Math.pow(1-h,3);this._core.store.state.scale=s+(i-s)*u;const d=this.clampTranslate(r+(t-r)*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,n=-this._core.store.state.translateY/this._core.store.state.scale+this._core.store.state.viewportHeight/2/this._core.store.state.scale,r=e.map((t=>{const e=t.rotatedBoundingBox,r=e.y+e.height/2;return{obj:t,distance:Math.sqrt(Math.pow(e.x+e.width/2-i,2)+Math.pow(r-n,2))}}));r.sort(((t,e)=>t.distance-e.distance));const o=r.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),g=Math.max(p,this.getEffectiveMinScale());return this.animateViewportTo(this._core.store.state.viewportWidth/2-d*g,this._core.store.state.viewportHeight/2-f*g,g),!0}centerFitObjects(t,e=!0){if(0===t.length)return!1;let i=1/0,n=1/0,r=-1/0,o=-1/0;for(const e of t){const t=e.rotatedBoundingBox;i=Math.min(i,t.x),n=Math.min(n,t.y),r=Math.max(r,t.x+t.width),o=Math.max(o,t.y+t.height)}const s=r-i,a=o-n,l=i+s/2,c=n+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,e?150:0),!0}centerFitAllObjects(t=!0){return this.centerFitObjects(this._core.store.allNonSelectionObjects,t)}}class At extends O{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:"+",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=this._core.toolRegistry.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||this._core.store.activeInteractiveCustomElement)&&"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:n,category:r})=>({key:t,ctrl:e,shift:i,label:n,category:r})))}}class Et extends O{globalContextMenuItems=[];objectContextMenuItems=[];constructor(t,e,i){super(t),this.globalContextMenuItems=e,this.objectContextMenuItems=i}resolveLabels(t){return t.map((t=>({...t,label:this._core.localizationManager.translate(t.label),children:t.children?this.resolveLabels(t.children):void 0})))}getResolvedContextMenuItems(){return this.resolveLabels(this._core.store.selectionGroup?this.objectContextMenuItems:this.globalContextMenuItems)}handleContextMenu(t){if(!(this._core.store.state.activeTool instanceof c))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 A)),this._core.store.setSelectionBox(null),this._core.store.state.isSelecting=!1);const i=this._core.getObjectFromPointerEvent(t,".object");if(i&&!(i instanceof j)&&!(i instanceof A)){const t=j.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.getResolvedContextMenuItems();const n=t.clientX-this._core.store.offsetX,r=t.clientY-this._core.store.offsetY,{translateX:o,translateY:s,scale:a}=this._core.store.state;this._core.store.state.contextMenuWorldX=(n-o)/a,this._core.store.state.contextMenuWorldY=(r-s)/a;let l=n,h=r;l+150>this._core.store.state.viewportWidth-10&&(l=this._core.store.state.viewportWidth-150-10),l=Math.max(10,l),h=Math.max(10,h),this._core.store.state.contextMenuX=l,this._core.store.state.contextMenuY=h,this._core.store.state.isContextMenuVisible=!0,this._core.store.state.isEnabled=!1,this._core.rerender()}open(t){const{x:e,y:i,objectId:n}=t;if(this._core.store.state.activeTool instanceof c){const t=this._core.store.state.activeTool;t?.moveHandler?.cancelPendingDrag()}if(this._core.store.selectionBox&&(this._core.store.objects.remove((t=>t instanceof A)),this._core.store.setSelectionBox(null),this._core.store.state.isSelecting=!1),n){const t=this._core.store.allObjects.find((t=>t.id===n));if(t&&!(t instanceof j)&&!(t instanceof A)){const e=j.create(this._core);e.addOrRemove(t),e.isSelected=!0,e.rotation=t.rotation,this._core.store.state.isSelecting=!1,this._core.store.selectionGroup&&this._core.removeSelectionGroup(),this._core.addSelectionGroup(e)}}this._core.store.state.contextMenuItems=this.getResolvedContextMenuItems(),this._core.store.state.contextMenuWorldX=e,this._core.store.state.contextMenuWorldY=i;const{translateX:r,translateY:o,scale:s}=this._core.store.state;let a=e*s+r,l=i*s+o;a+150>this._core.store.state.viewportWidth-10&&(a=this._core.store.state.viewportWidth-150-10),a=Math.max(10,a),l=Math.max(10,l),this._core.store.state.contextMenuX=a,this._core.store.state.contextMenuY=l,this._core.store.state.isContextMenuVisible=!0,this._core.store.state.isEnabled=!1,this._core.rerender()}}class _t{_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=B.create(this._core,t.fontSize,t.fontFamily).deserialize(t);break;case"KritzelShape":e=P.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=L.create(this._core).deserialize(t);break;case"KritzelCustomElement":e=R.create(this._core).deserialize(t);break;case"KritzelSelectionGroup":e=j.create(this._core).deserialize(t);break;case"KritzelGroup":e=F.create(this._core).deserialize(t);break;case"KritzelWorkspace":e=D.create(this._core,t).deserialize(t);break;case"KritzelBrushTool":e=new v(this._core);break;case"KritzelEraserTool":e=new m(this._core);break;case"KritzelImageTool":e=new z(this._core);break;case"KritzelSelectionTool":e=new c(this._core);break;case"KritzelTextTool":e=new h(this._core);break;case"KritzelLineTool":e=new y(this._core);break;case"KritzelShapeTool":e=new w(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 Ot={activeWorkspace:void 0,activeTool:null,objects:null,snapCandidate:null,snapPreviewCandidate: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,contextMenuWorldX:0,contextMenuWorldY:0,skipContextMenu:!1,debugInfo:{showObjectInfo:!1,showViewportInfo:!1,showSyncProviderInfo:!1,showAssetResolverInfo:!1,showMigrationInfo:!1},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 Dt{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 n=this.calculateSelectionBounds(t);for(const r of t){const t=r.rotatedBoundingBox;let o=r.translateX,s=r.translateY;const a=t.x-r.translateX,l=t.y-r.translateY;switch(e){case C.StartHorizontal:o=n.minX-a;break;case C.CenterHorizontal:o=r.translateX+((n.minX+n.maxX)/2-(t.x+t.width/2));break;case C.EndHorizontal:o=r.translateX+(n.maxX-(t.x+t.width));break;case C.StartVertical:s=n.minY-l;break;case C.CenterVertical:s=r.translateY+((n.minY+n.maxY)/2-(t.y+t.height/2));break;case C.EndVertical:s=r.translateY+(n.maxY-(t.y+t.height))}i.set(r.id,{translateX:o,translateY:s})}return i}}class Ft{core;registry={};constructor(t){this.core=t}registerTool(t,e){const i=new e(this.core);return i.name=t,this.registry[t]=i,i}hasTool(t){return t in this.registry}getTool(t){return this.registry[t]||(console.warn(`Unknown tool: ${t}`),null)}getToolByIndex(t){return Object.values(this.registry)[t]??null}}class Rt{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}reindex(t){return 0!==this.remove((e=>e.id===t.id))&&this.insert(t)}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:n,height:r}=this.bounds,o=n/2,s=r/2;this.children=[new Rt({x:t,y:e,z:i,width:o,height:s},this.capacity),new Rt({x:t+o,y:e,z:i,width:o,height:s},this.capacity),new Rt({x:t,y:e+s,z:i,width:o,height:s},this.capacity),new Rt({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 Lt{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;_networkSyncPromise=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}whenNetworkSynced(){return this._networkSyncPromise??Promise.resolve()}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,n=this.quadtree.filter((t=>t instanceof j&&null!=t.userId&&t.userId!==i&&!e.has(t.userId)));for(const t of n)this.quadtree.remove((e=>e.id===t.id)),this._idMap.delete(t.id),this._objectsMap&&this._ydoc.transact((()=>{this._objectsMap.delete(t.id)}),"local");n.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 Rt({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 _t(t),this._ydoc=new it.Doc,this._objectsMap=this._ydoc.getMap("objects"),this._metadataMap=this._ydoc.getMap("metadata");const n=t.editorId?`kritzel-workspace-${t.editorId}-${e}`:`kritzel-workspace-${e}`,r=i??zt,o=!!t.store?.state?.debugInfo?.showSyncProviderInfo,s=!o;for(const t of r.providers){let e;e="function"==typeof t?new t(n,this._ydoc,{quiet:s}):t.create(n,this._ydoc,{quiet:s}),this._providers.push(e)}if(o){const t=this._providers.map((t=>`${t.constructor.name} (${t.type})`)).join(", ");console.info(`[Kritzel] Workspace sync providers initialized for ${n}: ${t||"none"}`)}this._undoManager=new it.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 a=this._providers.filter((t=>"local"===t.type)),l=this._providers.filter((t=>"network"===t.type)),c=await Promise.allSettled(a.map((t=>t.connect())));if(o){const t=c.filter((t=>"fulfilled"===t.status)).length;console.info(`[Kritzel] Workspace local providers connected: ${t}/${a.length}`)}c.forEach(((t,e)=>{o&&"rejected"===t.status&&console.error(`[Kritzel] Sync provider "${a[e]?.constructor.name}" failed to connect:`,t.reason)})),o&&l.length>0&&console.info(`[Kritzel] Workspace network providers connecting in background: ${l.length}`);const h=l.map((t=>t.connect().catch((e=>{o&&console.error(`[Kritzel] Network sync provider "${t.constructor.name}" failed to connect:`,e)}))));this._networkSyncPromise=h.length>0?Promise.allSettled(h).then((()=>{})):null,this._isReady=!0;for(const t of l)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??""),W(this._ydoc,this._metadataMap,{objects:this._objectsMap},N,V,{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=[],n=[],r=[];let o=!1;e.forEach((e=>{const a=t.changes.keys.get(e);if(a&&"delete"===a.action)r.push(e),this._idMap.get(e)instanceof s&&(o=!0);else{const t=this._objectsMap?.get(e);if(t){const e=this._reviver?.revive(t);e instanceof j?n.push(e):(i.push(e),e instanceof s&&(o=!0))}}})),r.forEach((t=>{const e=this._idMap.get(t);e instanceof j&&e.deselectAllChildren?.(),this.quadtree.remove((e=>e.id===t)),this._idMap.delete(t)}));const a=[],l=[];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.reindex(t),this._idMap.set(t.id,t),l.push(t)}else this.quadtree.insert(t),this._idMap.set(t.id,t),a.push(t)}));const c=new Set;if(n.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.reindex(t),this._idMap.set(t.id,t)}else this.quadtree.insert(t),this._idMap.set(t.id,t);c.add(t.id),t.invalidateObjectsCache(),t.refreshObjectDimensions(void 0,!0),t.captureUnchangedSnapshots(),this.quadtree.reindex(t)})),i.length>0||r.length>0){const t=new Set([...i.map((t=>t.id)),...r]),e=this.quadtree.filter((t=>t instanceof j&&!c.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.reindex(i))}if(o&&this._core?.anchorManager.rebuildIndex(),this._core?.store.invalidateSelectionCache(),this._core?.rerender(),a.length>0&&this._core?.engine.emitObjectsAdded(a),r.length>0){const t=r.map((t=>({id:t})));this._core?.engine.emitObjectsRemoved(t)}l.length>0&&this._core?.engine.emitObjectsUpdated(l.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",V),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,n)=>{const r=this._reviver?.revive(i);r instanceof j&&null!=r.userId&&r.userId!==t?e.push(n):r&&(this.quadtree.insert(r),this._idMap.set(r.id,r))})),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._localOnlyMode||e.skipReindex?this.quadtree.update(t):this.quadtree.reindex(t),this._idMap.set(t.id,t),!this._localOnlyMode&&this._objectsMap&&this.isPersistable(t)){const i=t.serialize(),n=e.temporary?"temporary":"local";this._ydoc?.transact((()=>{this._objectsMap?.set(t.id,i)}),n)}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 A)}undo(){this._undoManager&&this._undoManager.canUndo()&&(this._undoManager.undo(),this._core?.anchorManager.rebuildIndex(),this._core?.engine.emitObjectsChange())}redo(){this._undoManager&&this._undoManager.canRedo()&&(this._undoManager.redo(),this._core?.anchorManager.rebuildIndex(),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 Pt{_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 j||t instanceof A))).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,n=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(n)?n-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 j||t instanceof A)))}get selectedObjects(){return this.allObjects.filter((t=>!(t instanceof j))).filter((t=>t.isSelected))}get selectionBox(){if(this._selectionBoxCacheValid)return this._cachedSelectionBox;const t=this.objects.filter((t=>t instanceof A));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 j));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 B&&t.isEditing));return t.length>0?t[0]:null}get activeShape(){const t=this.objects.filter((t=>t instanceof P&&t.isEditing));return t.length>0?t[0]:null}get activeInteractiveCustomElement(){return this.selectedObjects.find((t=>K.isInstanceOf(t,"KritzelCustomElement")&&t.hasFocusedInputElement()))??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,contextMenuItems:[...t.contextMenuItems],debugInfo:{...t.debugInfo},pointers:new Map(t.pointers),workspaces:[...t.workspaces],cursor:{...t.cursor}},this._state.objects=new Lt}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 n=this._listeners.get(t);n&&n.forEach((n=>n(e,i,String(t))))}}}class Bt{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 it.Doc,this._workspacesMap=this._ydoc.getMap("workspaces"),this._metadataMap=this._ydoc.getMap("metadata");const i=e?.appStateId??this.getOrCreateAppStateInstanceId(t),n=t.editorId?`kritzel-app-state-${t.editorId}-${i}`:`kritzel-app-state-${i}`,r=e??zt,o=!!t.store.state.debugInfo.showSyncProviderInfo,s=!o;for(const t of r.providers){let e;e="function"==typeof t?new t(n,this._ydoc,{quiet:s}):t.create(n,this._ydoc,{quiet:s}),this._providers.push(e)}if(o){const t=this._providers.map((t=>`${t.constructor.name} (${t.type})`)).join(", ");console.info(`[Kritzel] App-state sync providers initialized for ${n}: ${t||"none"}`)}this._workspacesObserver=t=>{this.handleWorkspacesChange(t)},this._workspacesMap.observe(this._workspacesObserver);const a=this._providers.filter((t=>"local"===t.type)),l=this._providers.filter((t=>"network"===t.type)),c=await Promise.allSettled(a.map((t=>t.connect())));if(o){const t=c.filter((t=>"fulfilled"===t.status)).length;console.info(`[Kritzel] App-state local providers connected: ${t}/${a.length}`)}c.forEach(((t,e)=>{o&&"rejected"===t.status&&console.error(`[Kritzel] Sync provider "${a[e]?.constructor.name}" failed to connect:`,t.reason)})),o&&l.length>0&&console.info(`[Kritzel] App-state network providers connecting in background: ${l.length}`);for(const t of l)t.connect().catch((e=>{o&&console.error(`[Kritzel] Network sync provider "${t.constructor.name}" failed to connect:`,e)}));this._isReady=!0,W(this._ydoc,this._metadataMap,{workspaces:this._workspacesMap},H,U,{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 n;try{n=e.getItem(i)}catch{throw new Error("[KritzelAppStateMap] Failed to read app-state instance id from localStorage.")}if(n)return n;const r=I.generateUUID();try{e.setItem(i,r)}catch{throw new Error("[KritzelAppStateMap] Failed to persist app-state instance id to localStorage.")}return r}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=[],n=[];e.forEach((e=>{const r=t.changes.keys.get(e);if(r&&"delete"===r.action)n.push(e);else{const t=this._workspacesMap.get(e);if(t){const e=this.reviveWorkspace(t);i.push(e)}}})),n.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 D(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",U)}),"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 Wt{_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",G.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,n=i.classList.contains("top-left"),r=i.classList.contains("bottom-right");this._core.store.state.cursor={icon:"move-vertical",rotation:e+(n||r?-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,n=t.cursor?.iconActive??i,r=t.cursor?.rotation,o=G.getCursor({iconName:e?n:i,rotation:r});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 Vt{_isFirefox=/firefox|fxios/i.test(navigator.userAgent);_isSafari=/safari/i.test(navigator.userAgent)&&!/chrome|chromium|crios|android|edg/i.test(navigator.userAgent);_requestHandlers=new Map;constructor(t){this.registerRequestPermissionHandler("clipboard-read",(async()=>{if(this._isFirefox||this._isSafari)return"granted";try{return"denied"===(await navigator.permissions.query({name:"clipboard-read"})).state?"denied":"granted"}catch{return"granted"}}))}registerRequestPermissionHandler(t,e){this._requestHandlers.set(t,e)}async checkPermission(t){return(await navigator.permissions.query({name:t})).state}async requestPermission(t){const e=this._requestHandlers.get(t);return e?e():this.checkPermission(t)}}class Nt{_core;_providers=[];constructor(t){this._core=t}register(t){this._providers.push(t)}async resolve(t){const e={core:this._core,event:t};for(const t of this._providers){if(!t.canHandle(e))continue;const i=await t.getPasteIntent(e);if("unknown"!==i.type)return i}return{type:"unknown"}}}const Kt="kritzel-clipboard/v1:";class Ut{canHandle(t){return!!t.event?.clipboardData}async getPasteIntent(t){const e=t.event?.clipboardData;if(!e)return{type:"unknown"};const i=Array.from(e.files??[]).filter((t=>t.type.startsWith("image/")));if(i.length>0)return{type:"image_files",files:i};if(e.types.includes("text/plain")){const t=this.determineTextPasteIntent(e.getData("text/plain"));if(t)return t}return{type:"unknown"}}parseClipboardPayload(t){if(!t||!t.startsWith(Kt))return null;try{const e=JSON.parse(t.slice(21));return 1===e?.version&&Array.isArray(e.objects)?e:null}catch{return null}}determineTextPasteIntent(t){const e=this.parseClipboardPayload(t);return e?{type:"kritzel_objects",payload:e}:t&&t.trim().length>0?{type:"plain_text",text:t}:null}}class Ht{canHandle(t){return!t.event?.clipboardData&&"undefined"!=typeof navigator&&!!navigator.clipboard}async getPasteIntent(t){if("undefined"==typeof navigator||!navigator.clipboard)return{type:"unknown"};const{clipboard:e}=navigator;if("granted"!==await t.core.permissionManager.checkPermission("clipboard-read")&&"granted"!==await t.core.permissionManager.requestPermission("clipboard-read"))return{type:"unknown"};if(e.read)try{const t=await e.read(),{imageFiles:i,text:n}=await this.processClipboardItems(t);if(i.length>0)return{type:"image_files",files:i};if(null!==n){const t=this.determineTextPasteIntent(n);if(t)return t}}catch{}if(e.readText){const t=this.determineTextPasteIntent(await e.readText());if(t)return t}return{type:"unknown"}}async processClipboardItems(t){const e=[];let i=null;return await Promise.all(t.map((async t=>{const n=t.types.find((t=>t.startsWith("image/")));if(n){const i=await t.getType(n);e.push(new File([i],"pasted-image",{type:n}))}else if(null===i&&t.types.includes("text/plain")){const e=await t.getType("text/plain");i=await e.text()}}))),{imageFiles:e,text:i}}parseClipboardPayload(t){if(!t||!t.startsWith(Kt))return null;try{const e=JSON.parse(t.slice(21));return 1===e?.version&&Array.isArray(e.objects)?e:null}catch{return null}}determineTextPasteIntent(t){const e=this.parseClipboardPayload(t);return e?{type:"kritzel_objects",payload:e}:t&&t.trim().length>0?{type:"plain_text",text:t}:null}}class Gt{canHandle(t){return!t.event?.clipboardData&&l.isIOS()}async getPasteIntent(t){const e=t.core.clipboardManager.sessionClipboardPayload;return e?{type:"kritzel_objects",payload:e}:{type:"unknown"}}}class qt{_core;_pasteIntentRegistry;_sessionClipboardPayload=null;_pasteOffset=0;constructor(t){this._core=t,this._pasteIntentRegistry=new Nt(this._core),this._pasteIntentRegistry.register(new Gt),this._pasteIntentRegistry.register(new Ut),this._pasteIntentRegistry.register(new Ht)}get sessionClipboardPayload(){return this._sessionClipboardPayload}serializeForClipboard(t){const e="function"==typeof t.serialize?t.serialize():t;return K.isInstanceOf(t,"KritzelGroup")&&(e.__children__=t.children.map((t=>this.serializeForClipboard(t)))),e}serializeClipboardPayload(t){return`${Kt}${JSON.stringify(t)}`}async writeBrowserClipboardPayload(t,e){const i=this.serializeClipboardPayload(t);if(e?.clipboardData)e.clipboardData.setData("text/plain",i);else if("undefined"!=typeof navigator&&navigator.clipboard?.writeText)try{await navigator.clipboard.writeText(i)}catch{}}reviveClipboardObject(t){const e=new _t(this._core),{__children__:i,...n}=t,r=e.revive(n);if(!r)return null;if(i&&K.isInstanceOf(r,"KritzelGroup")){const t=i.map((t=>this.reviveClipboardObject(t))).filter((t=>null!=t));r._pendingChildren=t,r.childIds=t.map((t=>t.id))}return r}regenerateIdsAndRemapAnchors(t){const e=[],i=t.length>0&&t.every((t=>K.isInstanceOf(t,"KritzelLine"))),n=t=>{for(const i of t)e.push(i),K.isInstanceOf(i,"KritzelGroup")&&n(i._pendingChildren)};n(t);const r=new Map;for(const t of e){const e=t.generateId();r.set(t.id,e),t.id=e,t.isMounted=!1}for(const t of e)K.isInstanceOf(t,"KritzelGroup")&&(t.childIds=t.childIds.map((t=>r.get(t)??t))),K.isInstanceOf(t,"KritzelLine")&&(t.startAnchor&&r.has(t.startAnchor.objectId)?t.startAnchor={objectId:r.get(t.startAnchor.objectId)}:i&&(t.startAnchor=void 0),t.endAnchor&&r.has(t.endAnchor.objectId)?t.endAnchor={objectId:r.get(t.endAnchor.objectId)}:i&&(t.endAnchor=void 0))}copy(t){const e=this._core.store.selectionGroup;if(!e)return;const i={version:1,sourceWorkspaceId:this._core.store.state.activeWorkspace?.id,objects:e.objects.sort(((t,e)=>t.zIndex-e.zIndex)).map((t=>this.serializeForClipboard(t)))};this._pasteOffset=0,this._sessionClipboardPayload=i,this.writeBrowserClipboardPayload(i,t)}cut(t){this._core.store.selectionGroup&&(this.copy(t),this._core.delete())}materializeKritzelObjects(t){const e=t.payload.objects.map((t=>this.reviveClipboardObject(t))).filter((t=>null!=t));return this.regenerateIdsAndRemapAnchors(e),e}async materializeImageFiles(t){try{const e=25/this._core.store.state.scale,i=t.files.map((async(t,i)=>{const n=await q(t,{maxWidthOrHeight:1200});return L.fromBlob(this._core,n,{translateX:i*e,translateY:i*e})}));return await Promise.all(i)}catch(t){return console.error("Failed to import pasted image files:",t),null}}async materializePlainText(t){const e=B.create(this._core),i=t.text.split("\n").map((t=>0===t.length?{type:"paragraph"}:{type:"paragraph",content:[{type:"text",text:t}]}));return e.setContent({type:"doc",content:i}),[e]}async paste(t,e,i){const n=await this._pasteIntentRegistry.resolve(i);let r=null;"kritzel_objects"===n.type?r=this.materializeKritzelObjects(n):"image_files"===n.type?r=await this.materializeImageFiles(n):"plain_text"===n.type&&(r=await this.materializePlainText(n)),r&&0!==r.length&&await this.insertMaterializedObjects(r,n,t,e)}async insertMaterializedObjects(t,e,i,n){const r=this._core.store.state.activeWorkspace;if(!r)return;const o=t.some((t=>t.workspaceId!==r.id))||"kritzel_objects"!==e.type,s=void 0!==i&&void 0!==n,a=Math.min(...t.map((t=>t.translateX))),l=Math.min(...t.map((t=>t.translateY)));let c,h;const u=25/this._core.store.state.scale;void 0!==i&&void 0!==n?(c=i,h=n):o?(c=a,h=l):(c=a+u+this._pasteOffset,h=l+u+this._pasteOffset,this._pasteOffset+=u);const d=c-a,f=h-l;this._core.removeSelectionGroup(),this._core.removeSelectionBox();const p=j.create(this._core),g=this._core.store.currentZIndex;this._core.store.objects.transaction((()=>{const e=(t,i)=>{if(0===t._pendingChildren.length)return;const n=t._pendingChildren;t._pendingChildren=[],n.forEach(((t,n)=>{t.workspaceId!==r.id&&(t.workspaceId=r.id),t.updatePosition(t.translateX+d,t.translateY+f),t.zIndex=i+n+1,K.isInstanceOf(t,"KritzelGroup")&&e(t,t.zIndex),this._core.addObject(t)})),t.finalize()},i=[];t.forEach(((t,n)=>{t.workspaceId!==r.id&&(t.workspaceId=r.id),t.updatePosition(t.translateX+d,t.translateY+f),t.zIndex=g+n,K.isInstanceOf(t,"KritzelGroup")&&e(t,t.zIndex),this._core.addObject(t),i.push(t),p.addOrRemove(t)})),this._core.engine.emitObjectsAdded(i)})),this._core.anchorManager.rebuildIndex(),p.isSelected=!0,1===t.length&&(p.rotation=t[0].rotation),o&&!s&&p.centerInViewport(),this._core.addSelectionGroup(p),this._core.engine.viewport?.bringIntoViewIfNeeded(p),this._core.store.state.isSelecting=!1,await new Promise((t=>{requestAnimationFrame((()=>requestAnimationFrame((()=>t()))))})),p.refreshObjectDimensions(),o&&!s&&p.centerInViewport(),this._core.engine.emitObjectsChange(),this._core.rerender(),this._core.store.setState("activeTool",this._core.toolRegistry.getTool("selection")),this._core.engine.emitObjectsChange(),this._core.rerender()}}class Yt{_kritzelEngine;_store;_syncConfig;_assetStorageConfig;_assetResolver;_appStateMap;_anchorManager;_cursorManager;_themeManager;_localizationManager;_licenseManager;_permissionManager;_clipboardManager;_toolRegistry;_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 localizationManager(){return this._localizationManager}get licenseManager(){return this._licenseManager}get permissionManager(){return this._permissionManager}get toolRegistry(){return this._toolRegistry}get clipboardManager(){return this._clipboardManager}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 Pt(Ot),this._appStateMap=new Bt,this._anchorManager=new Y(this),this._cursorManager=new Wt(this),this._themeManager=new Z(this),this._localizationManager=new X(this),this._licenseManager=new J(this),this._permissionManager=new Vt(this),this._clipboardManager=new qt(this),this._toolRegistry=new Ft(this),this._assetResolver=new Q,this._assetResolver.setShowInfo(this._store.state.debugInfo?.showAssetResolverInfo??!1)}get assetResolver(){return this._assetResolver}setSyncConfig(t){this._syncConfig=t}setAssetStorageConfig(t){this._assetStorageConfig=t}setEditorId(t){this._editorId=t,this._themeManager=new Z(this),this._localizationManager=new X(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(),n=!t&&!!this._editorId,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,o=localStorage.getItem(this.getStorageKey("kritzel-active-workspace-id")),s=o?i.find((t=>t.id===o)):null;let a;if(t)a=t,i.find((e=>e.id===t.id))||(a._core=this,this.saveWorkspaceToAppState(a));else if(s)a=s;else if(r&&!n)a=r;else{if(e?.skipFallbackCreation)return this._store.state.workspaces=i,this._store.state.activeWorkspace=null,void this.rerender();a=new D(I.generateUUID(),"New Workspace"),a._core=this,this.saveWorkspaceToAppState(a)}localStorage.setItem(this.getStorageKey("kritzel-active-workspace-id"),a.id),this._store.objects&&this._store.objects.isReady&&this._store.objects.destroy();const l=new Lt;this._store.state.objects=l,this._store.state.activeWorkspace=a,this._store.state.workspaces=this.loadWorkspacesFromAppState();const c=a.viewport??{centerWorldX:0,centerWorldY:0,scale:1},h=c.scale??1,u=this._store.state.viewportHeight;this._store.state.translateX=this._store.state.viewportWidth/2-(c.centerWorldX??0)*h,this._store.state.translateY=u/2-(c.centerWorldY??0)*h,this._store.state.scale=h,await l.initialize(this,a.id,this._syncConfig),this._user&&l.setLocalUser(this._user),l.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 D(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 j||t instanceof A))).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 n=this._store.state.activeWorkspace;n&&this._store.state.workspaces.some((t=>t.id===n.id))&&(n.viewport={centerWorldX:(this._store.state.viewportWidth/2-t)/i,centerWorldY:(this._store.state.viewportHeight/2-e)/i,scale:i},n.updatedAt=new Date,this.saveWorkspaceToAppState(n))}getIsPublic(){return this._store.state.activeWorkspace?.isPublic??!1}addObject(t){this._store.objects.insert(t)}removeObject(t,e=!1){K.isInstanceOf(t,"KritzelGroup")&&!e&&[...t.children].forEach((t=>{this.removeObject(t)})),K.isInstanceOf(t,"KritzelCustomElement")&&t.unmount(),K.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 n in e)if(e.hasOwnProperty(n)){const r=e[n];void 0!==r&&(t[n]=r,i.push(n))}t.onAfterUpdate(i),this._store.objects.update(t)}addSelectionGroup(t){this.removeLocalSelectionGroups(),this.removeSelectionBox();for(const e of t.objects??[])if(K.isInstanceOf(e,"KritzelCustomElement")){const t=e;"function"==typeof t.setIsInteractive?t.setIsInteractive(!0):t.isInteractive=!0}this._store.objects.insert(t),this._store.setSelectionGroup(t),this._kritzelEngine.triggerSelectionChange()}isLocalSelectionGroup(t){const e=this._user?.id;return null==e||t.userId===e||null==t.userId}teardownSelectionGroup(t){t.deselectAllChildren?.();for(const e of t.objects??[])if(K.isInstanceOf(e,"KritzelCustomElement")){const t=e;"function"==typeof t.setIsInteractive?t.setIsInteractive(!1):t.isInteractive=!1}}removeLocalSelectionGroups(){const t=this._store.objects.allObjects().filter((t=>t instanceof j||K.isInstanceOf(t,"KritzelSelectionGroup"))).filter((t=>this.isLocalSelectionGroup(t))),e=this._store.selectionGroup;if(e&&this.isLocalSelectionGroup(e)&&!t.some((t=>t.id===e.id))&&t.push(e),0===t.length)return!1;for(const e of t)this.teardownSelectionGroup(e);const i=new Set(t.map((t=>t.id)));return this._store.objects.remove((t=>i.has(t.id))),this._store.setSelectionGroup(null),!0}removeSelectionGroup(){this.removeLocalSelectionGroups()&&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())}bringForward(t){const e=this._store.selectionGroup,i=t?[t]:e?.objects||[],n=this._store.allNonSelectionObjects.filter((t=>-1===i.findIndex((e=>e.id===t.id)))),r=n.length>0?Math.max(...n.map((t=>t.zIndex)))+1:0;i.forEach((t=>{t.zIndex!==r&&this.updateObject(t,{zIndex:t.zIndex+1})})),this.rerender()}sendBackward(t){const e=this._store.selectionGroup,i=t?[t]:e?.objects||[],n=this._store.allNonSelectionObjects.filter((t=>-1===i.findIndex((e=>e.id===t.id)))),r=n.length>0?Math.min(...n.map((t=>t.zIndex)))-1:0;i.forEach((t=>{t.zIndex!==r&&this.updateObject(t,{zIndex:t.zIndex-1})})),this.rerender()}bringToFront(t){const e=this._store.selectionGroup,i=t?[t]:e?.objects||[],n=this._store.allNonSelectionObjects.filter((t=>-1===i.findIndex((e=>e.id===t.id)))),r=Math.max(...n.map((t=>t.zIndex)))+1;i.forEach((t=>{this.updateObject(t,{zIndex:r})})),this.rerender()}sendToBack(t){const e=this._store.selectionGroup,i=t?[t]:e?.objects||[],n=this._store.allNonSelectionObjects.filter((t=>-1===i.findIndex((e=>e.id===t.id)))),r=Math.min(...n.map((t=>t.zIndex)))-1;i.forEach((t=>{this.updateObject(t,{zIndex:r})})),this.rerender()}alignObjects(t){const e=this._store.selectionGroup;if(!e||e.objects.length<2)return;const i=e.objects,n=Dt.calculateAlignedPositions(i,t);this._store.objects.transaction((()=>{for(const t of i){const e=n.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=F.createFromObjects(this,t.objects);this.addObject(e),this.removeSelectionGroup();const i=j.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=>K.isInstanceOf(t,"KritzelGroup")));if(0===e.length)return;const i=[],n=t.objects.filter((t=>!K.isInstanceOf(t,"KritzelGroup")));e.forEach((t=>{const e=t.ungroup();i.push(...e),this.removeObject(t,!0)})),this.removeSelectionGroup();const r=j.create(this);[...i,...n].forEach((t=>{r.addOrRemove(t)})),r.isSelected=!0,this.addSelectionGroup(r),this.engine.emitObjectsChange(),this.rerender()}selectObjects(t){if(0===t.length)return;const e=j.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 j||t instanceof A||t instanceof dt)));if(t.length>0){const e=j.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",this._toolRegistry.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 j||t instanceof A||t instanceof dt)));if(t.length>0){const e=j.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",this._toolRegistry.getTool("selection")),this.rerender()}}clearSelection(){this.removeSelectionGroup();const t=this._user?.id;this._store.objects.remove((e=>e instanceof A||e instanceof j&&(null==t||e.userId===t||null==e.userId))),this._store.setSelectionBox(null),this._store.setSelectionGroup(null);for(const t of this._store.allNonSelectionObjects)t.isSelected&&(t.isSelected=!1);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 n=t.clientX,r=t.clientY,o=i.elementFromPoint(n,r);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(n,r)?t:null}return null}getObjectsFromPointerEvent(t,e=".object"){const i=this._store.state.host?.shadowRoot;if(!i)return[];const n=i.elementsFromPoint(t.clientX,t.clientY);if(!n||0===n.length)return[];const r=new Set;return n.forEach((t=>{const i=t.closest(e);i&&i.id&&r.add(i.id)})),r.size>0?this._store.allObjects.filter((t=>r.has(t.id))).sort(((t,e)=>e.zIndex-t.zIndex)):[]}getElementsAtPoint(t,e){const i=this._store.state.host?.shadowRoot;if(!i)return[];const n=i.elementsFromPoint(t.clientX,t.clientY);return n&&0!==n.length?n.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",this._toolRegistry.getTool("selection"))}displaySelectionGroupUI(t){if(!t.isSelected)return!1;if(t instanceof j&&null!=this._user?.id&&null!=t.userId&&t.userId!==this._user.id)return!0;const e=this._store.selectionGroup;return e?t instanceof j&&t.id===e.id&&(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 Zt{static calculateCombinedBounds(t){if(!t||0===t.length)return null;let e=1/0,i=1/0,n=-1/0,r=-1/0;for(const o of t){const t=o.rotatedBoundingBox;e=Math.min(e,t.x),i=Math.min(i,t.y),n=Math.max(n,t.x+t.width),r=Math.max(r,t.y+t.height)}return{x:e,y:i,z:1,width:n-e,height:r-i}}static generateSvg(t,e={}){const{theme:i,padding:n=0,includeXmlDeclaration:r=!0,rasterSafeForCanvas:o=!1,imageDataUrls:s}=e;if(!t||0===t.length)return"";const a=this.flattenObjects(t),l=this.calculateCombinedBounds(a);if(!l)return"";const c=l.x-n,h=l.y-n,u=l.width+2*n,d=l.height+2*n,f=this.collectDefs(a,i),p=t.sort(((t,e)=>t.zIndex-e.zIndex)).map((t=>this.objectToSvgElement(t,i,s,o))).filter(Boolean).join("\n ");return`${r?'<?xml version="1.0" encoding="UTF-8"?>\n':""}<svg xmlns="http://www.w3.org/2000/svg" viewBox="${c} ${h} ${u} ${d}" width="${u}" height="${d}">${f.length>0?`\n <defs>\n ${f.join("\n ")}\n </defs>`:""}\n ${p}\n</svg>`}static flattenObjects(t){const e=[];for(const i of t)K.isInstanceOf(i,"KritzelGroup")?e.push(...this.flattenObjects(i.children)):e.push(i);return e}static async resolveImageDataUrls(t,e){const i=new Map;if(!t||0===t.length)return i;const n=this.flattenObjects(t).filter((t=>K.isInstanceOf(t,"KritzelImage")));return await Promise.all(n.map((async t=>{if(t.src?.startsWith("data:"))i.set(t.id,t.src);else if(t.resolvedSrc?.startsWith("data:"))i.set(t.id,t.resolvedSrc);else if(t.assetId&&e)try{const n=await e.fetchBlob(t.assetId);i.set(t.id,await this.blobToDataUrl(n))}catch(e){console.warn(`[KritzelSvgExportHelper] Failed to inline image asset ${t.assetId} for export:`,e)}}))),i}static async blobToDataUrl(t){if("undefined"!=typeof FileReader)try{return await new Promise(((e,i)=>{const n=new FileReader;n.onload=()=>{"string"!=typeof n.result?i(new Error("FileReader result is not a string")):e(n.result)},n.onerror=()=>i(n.error??new Error("Failed to read blob as data URL")),n.readAsDataURL(t)}))}catch{}const e=new Uint8Array(await t.arrayBuffer());return`data:${t.type||"application/octet-stream"};base64,${this.uint8ToBase64(e)}`}static uint8ToBase64(t){if("undefined"!=typeof Buffer)return Buffer.from(t).toString("base64");let e="";for(let i=0;i<t.length;i+=32768){const n=t.subarray(i,Math.min(i+32768,t.length));e+=String.fromCharCode(...n)}if("function"==typeof btoa)return btoa(e);throw new Error("No base64 encoder available in this runtime")}static collectDefs(t,e){const i=[];for(const n of t)K.isInstanceOf(n,"KritzelLine")&&(n.hasStartArrow&&i.push(this.generateArrowMarker(n,"start",e)),n.hasEndArrow&&i.push(this.generateArrowMarker(n,"end",e)));return i}static generateArrowMarker(t,e,i){const n="start"===e?t.startMarkerId:t.endMarkerId,r=t.getArrowSize(e),o=t.getArrowFill(e);return`<marker id="${n}" markerWidth="${r}" markerHeight="${r}" refX="0" refY="${r/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(${r/10})"/>\n </marker>`}static objectToSvgElement(t,e,i,n=!1){return K.isInstanceOf(t,"KritzelPath")?this.pathToSvg(t,e):K.isInstanceOf(t,"KritzelLine")?this.lineToSvg(t,e):K.isInstanceOf(t,"KritzelShape")?this.shapeToSvg(t,e):K.isInstanceOf(t,"KritzelText")?this.textToSvg(t,e,n):K.isInstanceOf(t,"KritzelImage")?this.imageToSvg(t,i):K.isInstanceOf(t,"KritzelCustomElement")?this.customElementToSvg(t,n):K.isInstanceOf(t,"KritzelGroup")?this.groupToSvg(t,e,i,n):""}static pathToSvg(t,e){const i=this.buildTransform(t),n=a.resolveThemeColor(t.fill,e),r=a.resolveThemeColor(t.stroke,e),o=1!==t.opacity?` opacity="${t.opacity}"`:"",s=this.getObjectScale(t);return`<g transform="${i}"${o}>\n <svg viewBox="${t.viewBox}" width="${t.totalWidth/s}" height="${t.totalHeight/s}" overflow="visible">\n <path d="${t.d}" fill="${n||"none"}" stroke="${r||"none"}"${t.strokeWidth?` stroke-width="${t.strokeWidth}"`:""}/>\n </svg>\n </g>`}static lineToSvg(t,e){const i=this.buildTransform(t),n=a.resolveThemeColor(t.stroke,e),r=1!==t.opacity?` opacity="${t.opacity}"`:"",o=this.getObjectScale(t);return`<g transform="${i}"${r}>\n <svg viewBox="${t.viewBox}" width="${t.totalWidth/o}" height="${t.totalHeight/o}" overflow="visible">\n <path d="${t.d}" fill="none" stroke="${n}" 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),n=a.resolveThemeColor(t.fillColor,e),r=a.resolveThemeColor(t.strokeColor,e),o=1!==t.opacity?` opacity="${t.opacity}"`:"",s=this.getObjectScale(t),l=t.getSvgPath();let c="";if(t.editor&&!t.editor.state.doc.textContent.trim());else if(t.content){const i=this.prosemirrorToHtml(t.content,t,e);if(i){const n=a.resolveThemeColor(t.fontColor,e);c=`\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: ${n}; overflow: hidden;">\n ${i}\n </div>\n </foreignObject>`}}return`<g transform="${i}"${o}>\n <svg viewBox="${t.viewBox}" width="${t.totalWidth/s}" height="${t.totalHeight/s}" overflow="visible" preserveAspectRatio="none">\n <path d="${l}" fill="${n||"transparent"}" stroke="${r}" stroke-width="${t.strokeWidth}"/>${c}\n </svg>\n </g>`}static textToSvg(t,e,i=!1){if(i)return this.textToSvgRasterSafe(t,e);const n=this.buildTransform(t),r=1!==t.opacity?` opacity="${t.opacity}"`:"",o=a.resolveThemeColor(t.fontColor,e),s=a.resolveThemeColor(t.backgroundColor,e),l=this.getObjectScale(t),c=this.prosemirrorToHtml(t.content,t,e);return`<g transform="${n}"${r}>\n <foreignObject x="0" y="0" width="${t.totalWidth/l}" height="${t.totalHeight/l}">\n <div xmlns="http://www.w3.org/1999/xhtml" style="font-family: ${t.fontFamily}; font-size: ${t.fontSize}pt; color: ${o}; background-color: ${s||"transparent"}; transform: scale(${t.scaleFactor}); transform-origin: top left; white-space: pre-wrap; word-wrap: break-word;">\n ${c}\n </div>\n </foreignObject>\n </g>`}static textToSvgRasterSafe(t,e){const i=this.buildTransform(t),n=1!==t.opacity?` opacity="${t.opacity}"`:"",r=a.resolveThemeColor(t.fontColor,e),o=a.resolveThemeColor(t.backgroundColor,e),s=this.getObjectScale(t),l=t.totalWidth/s,c=t.totalHeight/s,h=this.prosemirrorToPlainTextLines(t.content),u=h.length>0?h:[""],d=Math.max(1,t.fontSize*(t.scaleFactor||1)),f=1.2*d,p=d,g=o&&"transparent"!==o?`<rect x="0" y="0" width="${l}" height="${c}" fill="${o}"/>`:"",b=u.map(((t,e)=>`<tspan x="0" y="${p+e*f}" xml:space="preserve">${this.escapeHtml(t)}</tspan>`)).join("");return`<g transform="${i}"${n}>\n ${g}\n <text font-family="${this.escapeHtml(t.fontFamily)}" font-size="${d}" fill="${r}">${b}</text>\n </g>`}static imageToSvg(t,e){const i=this.buildTransform(t),n=1!==t.opacity?` opacity="${t.opacity}"`:"",r=this.getObjectScale(t),o=t.totalWidth/r,s=t.totalHeight/r;return`<g transform="${i}"${n}>\n <image href="${e?.get(t.id)||t.resolvedSrc||t.src||""}" x="0" y="0" width="${o}" height="${s}" preserveAspectRatio="xMidYMid meet"/>\n </g>`}static customElementToSvg(t,e=!1){const i=this.buildTransform(t),n=1!==t.opacity?` opacity="${t.opacity}"`:"",r=this.getObjectScale(t),o=t.totalWidth/r,s=t.totalHeight/r;return e?(console.warn("[KritzelCustomElement SVG Export] Custom elements do not serialize well to PNG. Use SVG export or screenshot instead."),`<g transform="${i}"${n}>\n <rect x="0" y="0" width="${o}" height="${s}" fill="#f0f0f0" stroke="#999" stroke-width="1" />\n <text x="${o/2}" y="${s/2}" text-anchor="middle" dominant-baseline="middle" font-size="12" fill="#999">[Custom Element]</text>\n </g>`):`<g transform="${i}"${n}>\n <foreignObject x="0" y="0" width="${o}" height="${s}">\n <div xmlns="http://www.w3.org/1999/xhtml" style="width:100%;height:100%;overflow:hidden;">\n ${t.element?.outerHTML||'<div style="border:1px dashed #ccc">Empty</div>'}\n </div>\n </foreignObject>\n </g>`}static groupToSvg(t,e,i,n=!1){const r=t.children.sort(((t,e)=>t.zIndex-e.zIndex)).map((t=>this.objectToSvgElement(t,e,i,n))).filter(Boolean).join("\n ");return r?`<g${1!==t.opacity?` opacity="${t.opacity}"`:""}>\n ${r}\n </g>`:""}static buildTransform(t){const e=[],i=this.getObjectScale(t);if(e.push(`translate(${t.translateX}, ${t.translateY})`),0!==t.rotation){const n=t.rotation*(180/Math.PI);e.push(`rotate(${n}, ${t.totalWidth/2/i}, ${t.totalHeight/2/i})`)}return e.join(" ")}static getObjectScale(t){const e=t.scale??1;return 0===e?1:e}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 n of t.marks)i=this.applyMark(i,n,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 prosemirrorToPlainTextLines(t){if(!t||!Array.isArray(t.content))return[];const e=t.content.map((t=>this.nodeToPlainText(t))).join("").replace(/\r\n/g,"\n").replace(/\n+$/,"");return e?e.split("\n"):[]}static nodeToPlainText(t){if(!t)return"";switch(t.type){case"text":return t.text||"";case"hard_break":return"\n";case"paragraph":return`${Array.isArray(t.content)?t.content.map((t=>this.nodeToPlainText(t))).join(""):""}\n`;case"list_item":return`- ${(Array.isArray(t.content)?t.content.map((t=>this.nodeToPlainText(t))).join(""):"").trim()}\n`;default:return Array.isArray(t.content)?t.content.map((t=>this.nodeToPlainText(t))).join(""):""}}static applyMark(t,e,i){switch(e.type){case"bold":case"strong":return`<strong>${t}</strong>`;case"italic":case"em":return`<em>${t}</em>`;case"underline":return`<u>${t}</u>`;case"strike":return`<s>${t}</s>`;case"code":return`<code>${t}</code>`;case"link":return`<a href="${this.escapeHtml(e.attrs?.href||"#")}">${t}</a>`;default:return t}}static escapeHtml(t){return t.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}}const Xt=(()=>{let t=0;return()=>(t+=1,`u${`0000${(Math.random()*36**4|0).toString(36)}`.slice(-4)}${t}`)})();function Jt(t){const e=[];for(let i=0,n=t.length;i<n;i++)e.push(t[i]);return e}let Qt=null;function te(t={}){return Qt||(t.includeStyleProperties?(Qt=t.includeStyleProperties,Qt):(Qt=Jt(window.getComputedStyle(document.documentElement)),Qt))}function ee(t,e){const i=(t.ownerDocument.defaultView||window).getComputedStyle(t).getPropertyValue(e);return i?parseFloat(i.replace("px","")):0}function ie(t,e={}){return{width:e.width||function(t){const e=ee(t,"border-left-width"),i=ee(t,"border-right-width");return t.clientWidth+e+i}(t),height:e.height||function(t){const e=ee(t,"border-top-width"),i=ee(t,"border-bottom-width");return t.clientHeight+e+i}(t)}}const ne=16384;function re(t){return new Promise(((e,i)=>{const n=new Image;n.onload=()=>{n.decode().then((()=>{requestAnimationFrame((()=>e(n)))}))},n.onerror=i,n.crossOrigin="anonymous",n.decoding="async",n.src=t}))}const oe=(t,e)=>{if(t instanceof e)return!0;const i=Object.getPrototypeOf(t);return null!==i&&(i.constructor.name===e.name||oe(i,e))};function se(t,e,i,n){const r=window.getComputedStyle(t,i),o=r.getPropertyValue("content");if(""===o||"none"===o)return;const s=Xt();try{e.className=`${e.className} ${s}`}catch(t){return}const a=document.createElement("style");a.appendChild(function(t,e,i,n){const r=`.${t}:${e}`,o=i.cssText?function(t){const e=t.getPropertyValue("content");return`${t.cssText} content: '${e.replace(/'|"/g,"")}';`}(i):function(t,e){return te(e).map((e=>`${e}: ${t.getPropertyValue(e)}${t.getPropertyPriority(e)?" !important":""};`)).join(" ")}(i,n);return document.createTextNode(`${r}{${o}}`)}(s,i,r,n)),e.appendChild(a)}const ae="application/font-woff",le="image/jpeg",ce={woff:ae,woff2:ae,ttf:"application/font-truetype",eot:"application/vnd.ms-fontobject",png:"image/png",jpg:le,jpeg:le,gif:"image/gif",tiff:"image/tiff",svg:"image/svg+xml",webp:"image/webp"};function he(t){const e=function(t){const e=/\.([^./]*?)$/g.exec(t);return e?e[1]:""}(t).toLowerCase();return ce[e]||""}function ue(t){return-1!==t.search(/^(data:)/)}async function de(t,e,i){const n=await fetch(t,e);if(404===n.status)throw new Error(`Resource "${n.url}" not found`);const r=await n.blob();return new Promise(((t,e)=>{const o=new FileReader;o.onerror=e,o.onloadend=()=>{try{t(i({res:n,result:o.result}))}catch(t){e(t)}},o.readAsDataURL(r)}))}const fe={};async function pe(t,e,i){const n=function(t,e,i){let n=t.replace(/\?.*/,"");return i&&(n=t),/ttf|otf|eot|woff2?/i.test(n)&&(n=n.replace(/.*\//,"")),e?`[${e}]${n}`:n}(t,e,i.includeQueryParams);if(null!=fe[n])return fe[n];let r;i.cacheBust&&(t+=(/\?/.test(t)?"&":"?")+(new Date).getTime());try{const n=await de(t,i.fetchRequestInit,(({res:t,result:i})=>(e||(e=t.headers.get("Content-Type")||""),function(t){return t.split(/,/)[1]}(i))));r=function(t,e){return`data:${e};base64,${t}`}(n,e)}catch(e){r=i.imagePlaceholder||"";let n=`Failed to fetch resource: ${t}`;e&&(n="string"==typeof e?e:e.message),n&&console.warn(n)}return fe[n]=r,r}const ge=t=>null!=t.tagName&&"SLOT"===t.tagName.toUpperCase(),be=t=>null!=t.tagName&&"SVG"===t.tagName.toUpperCase();async function ve(t,e,i){return i||!e.filter||e.filter(t)?Promise.resolve(t).then((t=>async function(t,e){return oe(t,HTMLCanvasElement)?async function(t){const e=t.toDataURL();return"data:,"===e?t.cloneNode(!1):re(e)}(t):oe(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),re(e.toDataURL())}const i=t.poster,n=he(i);return re(await pe(i,n,e))}(t,e):oe(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 ve(t.contentDocument.body,e,!0)}catch(t){}return t.cloneNode(!1)}(t,e):t.cloneNode(be(t))}(t,e))).then((i=>async function(t,e,i){var n,r;if(be(e))return e;let o=[];return o=ge(t)&&t.assignedNodes?Jt(t.assignedNodes()):oe(t,HTMLIFrameElement)&&(null===(n=t.contentDocument)||void 0===n?void 0:n.body)?Jt(t.contentDocument.body.childNodes):Jt((null!==(r=t.shadowRoot)&&void 0!==r?r:t).childNodes),0===o.length||oe(t,HTMLVideoElement)||await o.reduce(((t,n)=>t.then((()=>ve(n,i))).then((t=>{t&&e.appendChild(t)}))),Promise.resolve()),e}(t,i,e))).then((i=>function(t,e,i){return oe(e,Element)&&(function(t,e,i){const n=e.style;if(!n)return;const r=window.getComputedStyle(t);r.cssText?(n.cssText=r.cssText,n.transformOrigin=r.transformOrigin):te(i).forEach((i=>{let o=r.getPropertyValue(i);if("font-size"===i&&o.endsWith("px")){const t=Math.floor(parseFloat(o.substring(0,o.length-2)))-.1;o=`${t}px`}oe(t,HTMLIFrameElement)&&"display"===i&&"inline"===o&&(o="block"),"d"===i&&e.getAttribute("d")&&(o=`path(${e.getAttribute("d")})`),n.setProperty(i,o,r.getPropertyPriority(i))}))}(t,e,i),function(t,e,i){se(t,e,":before",i),se(t,e,":after",i)}(t,e,i),function(t,e){oe(t,HTMLTextAreaElement)&&(e.innerHTML=t.value),oe(t,HTMLInputElement)&&e.setAttribute("value",t.value)}(t,e),function(t,e){if(oe(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 n={};for(let r=0;r<i.length;r++){const o=i[r].getAttribute("xlink:href");if(o){const i=t.querySelector(o),r=document.querySelector(o);i||!r||n[o]||(n[o]=await ve(r,e,!0))}}const r=Object.values(n);if(r.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 n=document.createElementNS(e,"defs");i.appendChild(n);for(let t=0;t<r.length;t++)n.appendChild(r[t]);t.appendChild(i)}return t}(t,e))):null}const me=/url\((['"]?)([^'"]+?)\1\)/g,ke=/url\([^)]+\)\s*format\((["']?)([^"']+)\1\)/g,ye=/src:\s*(?:url\([^)]+\)\s*format\([^)]+\)[,;]\s*)+/g;function we(t){return-1!==t.search(me)}async function xe(t,e,i){if(!we(t))return t;const n=function(t,{preferredFontFormat:e}){return e?t.replace(ye,(t=>{for(;;){const[i,,n]=ke.exec(t)||[];if(!n)return"";if(n===e)return`src: ${i};`}})):t}(t,i),r=function(t){const e=[];return t.replace(me,((t,i,n)=>(e.push(n),t))),e.filter((t=>!ue(t)))}(n);return r.reduce(((t,n)=>t.then((t=>async function(t,e,i,n){try{const r=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(),n=i.createElement("base"),r=i.createElement("a");return i.head.appendChild(n),i.body.appendChild(r),e&&(n.href=e),r.href=t,r.href}(e,i):e,o=he(e);let s;return s=await pe(r,o,n),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,n,e,i)))),Promise.resolve(n))}async function ze(t,e,i){var n;const r=null===(n=e.style)||void 0===n?void 0:n.getPropertyValue(t);if(r){const n=await xe(r,null,i);return e.style.setProperty(t,n,e.style.getPropertyPriority(t)),!0}return!1}async function Ce(t,e){oe(t,Element)&&(await async function(t,e){await ze("background",t,e)||await ze("background-image",t,e),await ze("mask",t,e)||await ze("-webkit-mask",t,e)||await ze("mask-image",t,e)||await ze("-webkit-mask-image",t,e)}(t,e),await async function(t,e){const i=oe(t,HTMLImageElement);if((!i||ue(t.src))&&(!oe(t,SVGImageElement)||ue(t.href.baseVal)))return;const n=i?t.src:t.href.baseVal,r=await pe(n,he(n),e);await new Promise(((n,o)=>{t.onload=n,t.onerror=e.onImageErrorHandler?(...t)=>{try{n(e.onImageErrorHandler(...t))}catch(t){o(t)}}:o;const s=t;s.decode&&(s.decode=n),"lazy"===s.loading&&(s.loading="eager"),i?(t.srcset="",t.src=r):t.href.baseVal=r}))}(t,e),await async function(t,e){const i=Jt(t.childNodes).map((t=>Ce(t,e)));await Promise.all(i).then((()=>t))}(t,e))}const Se={};async function Ie(t){let e=Se[t];if(null!=e)return e;const i=await fetch(t);return e={url:t,cssText:await i.text()},Se[t]=e,e}async function Me(t,e){let i=t.cssText;const n=/url\(["']?([^"')]+)["']?\)/g,r=(i.match(/url\([^)]+\)/g)||[]).map((async r=>{let o=r.replace(n,"$1");return o.startsWith("https://")||(o=new URL(o,t.url).href),de(o,e.fetchRequestInit,(({result:t})=>(i=i.replace(r,`url(${t})`),[r,t])))}));return Promise.all(r).then((()=>i))}function $e(t){if(null==t)return[];const e=[];let i=t.replace(/(\/\*[\s\S]*?\*\/)/gi,"");const n=new RegExp("((@.*?keyframes [\\s\\S]*?){([\\s\\S]*?}\\s*?)})","gi");for(;;){const t=n.exec(i);if(null===t)break;e.push(t[0])}i=i.replace(n,"");const r=/@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=r.exec(i);if(null===t){if(t=o.exec(i),null===t)break;r.lastIndex=o.lastIndex}else o.lastIndex=r.lastIndex;e.push(t[0])}return e}function Te(t){return t.trim().replace(/["']/g,"")}async function je(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=Jt(t.ownerDocument.styleSheets),n=await async function(t,e){const i=[],n=[];return t.forEach((i=>{if("cssRules"in i)try{Jt(i.cssRules||[]).forEach(((t,r)=>{if(t.type===CSSRule.IMPORT_RULE){let o=r+1;const s=Ie(t.href).then((t=>Me(t,e))).then((t=>$e(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())}));n.push(s)}}))}catch(r){const o=t.find((t=>null==t.href))||document.styleSheets[0];null!=i.href&&n.push(Ie(i.href).then((t=>Me(t,e))).then((t=>$e(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",r)}})),Promise.all(n).then((()=>(t.forEach((t=>{if("cssRules"in t)try{Jt(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=>we(t.style.getPropertyValue("src"))))}(n)}(t,e),n=function(t){const e=new Set;return function t(i){(i.style.fontFamily||getComputedStyle(i).fontFamily).split(",").forEach((t=>{e.add(Te(t))})),Array.from(i.children).forEach((e=>{e instanceof HTMLElement&&t(e)}))}(t),e}(t);return(await Promise.all(i.filter((t=>n.has(Te(t.style.fontFamily)))).map((t=>xe(t.cssText,t.parentStyleSheet?t.parentStyleSheet.href:null,e))))).join("\n")}async function Ae(t,e={}){const{width:i,height:n}=ie(t,e),r=await ve(t,e,!0);return await async function(t,e){const i=null!=e.fontEmbedCSS?e.fontEmbedCSS:e.skipFonts?null:await je(t,e);if(i){const e=document.createElement("style"),n=document.createTextNode(i);e.appendChild(n),t.firstChild?t.insertBefore(e,t.firstChild):t.appendChild(e)}}(r,e),await Ce(r,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 n=e.style;null!=n&&Object.keys(n).forEach((t=>{i[t]=n[t]}))}(r,e),await async function(t,e,i){const n="http://www.w3.org/2000/svg",r=document.createElementNS(n,"svg"),o=document.createElementNS(n,"foreignObject");return r.setAttribute("width",`${e}`),r.setAttribute("height",`${i}`),r.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"),r.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}`))}(r)}(r,i,n)}class Ee{static shouldKeepWheelInCustomElement(t,e){if(t.ctrlKey||!0!==e.isSelected)return!1;const i="function"==typeof t.composedPath?t.composedPath():[],n=this.getScrollableContainerFromEventPath(i,e);return!!n&&this.canElementConsumeWheel(n,t.deltaX,t.deltaY)}static getScrollableContainerFromEventPath(t,e){const i=[];e.element instanceof HTMLElement&&i.push(e.element),e.elementRef instanceof HTMLElement&&i.push(e.elementRef);const n=e.elmeentRef;n instanceof HTMLElement&&i.push(n);for(const e of i){const i=t.findIndex((t=>t===e));if(-1!==i)for(const e of t.slice(0,i+1))if(e instanceof HTMLElement&&this.isScrollableElement(e))return e}for(const t of i){if(this.isScrollableElement(t))return t;const e=t.firstElementChild;if(e instanceof HTMLElement&&this.isScrollableElement(e))return e}return null}static isScrollableElement(t){const e=t.scrollHeight-t.clientHeight>0,i=t.scrollWidth-t.clientWidth>0;if(!e&&!i)return!1;const n=window.getComputedStyle(t),r=n.overflowX,o=n.overflowY;return e&&"visible"!==o&&"clip"!==o||i&&"visible"!==r&&"clip"!==r}static canElementConsumeWheel(t,e,i){const n=this.canElementConsumeVerticalWheel(t,i),r=this.canElementConsumeHorizontalWheel(t,e);return n||r}static canElementConsumeVerticalWheel(t,e){if(0===e)return!1;const i=Math.max(0,t.scrollHeight-t.clientHeight);return 0!==i&&(e>0?t.scrollTop<i-1:!!(e<0)&&t.scrollTop>1)}static canElementConsumeHorizontalWheel(t,e){if(0===e)return!1;const i=Math.max(0,t.scrollWidth-t.clientWidth);return 0!==i&&(e>0?t.scrollLeft<i-1:!!(e<0)&&t.scrollLeft>1)}}const _e=class{get host(){return r(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;onGlobalContextMenuItemsChange(t){this.contextMenuHandler&&(this.contextMenuHandler.globalContextMenuItems=t??[])}objectContextMenuItems;onObjectContextMenuItemsChange(t){this.contextMenuHandler&&(this.contextMenuHandler.objectContextMenuItems=t??[])}scaleMax=wt;validateScaleMax(t){t>wt?(console.warn("scaleMax cannot be greater than 1000."),this.scaleMax=wt,this.core.store.state.scaleMax=this.scaleMax):this.core.store.state.scaleMax=t}scaleMin=xt;validateScaleMin(t){t<xt?(console.warn("scaleMin cannot be less than 0.0001."),this.scaleMin=xt,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}isObjectDistanceFadingActive=!1;onIsObjectDistanceFadingActiveChange(){this.core.rerender()}theme="light";onThemeChange(t){this.core.themeManager.setTheme(t)}licenseKey;onLicenseKeyChange(t){this.core.licenseManager.validate(t)}themes;onThemesChange(t){t&&t.length>0&&(this.core.themeManager.registerThemes(t),this.core.themeManager.applyTheme(this.core.themeManager.currentTheme))}locale="en";onLocaleChange(t){this.core.localizationManager.setLocale(t)}locales;onLocalesChange(t){t&&t.length>0&&(this.core.localizationManager.registerLocales(t),this.core.localizationManager.setLocale(this.locale))}fallbackLocale="en";onFallbackLocaleChange(t){this.core.localizationManager.setFallbackLocale(t),this.core.rerender()}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,this.core.assetResolver.setShowInfo(t.showAssetResolverInfo))}isPanningEnabled=!0;isZoomingEnabled=!0;isLoading=!1;onIsLoadingChange(){this.syncLoadingState()}isEngineReady;activeToolChange;objectsSelectionChange;workspacesChange;activeWorkspaceChange;longpress;objectsChange;objectsAdded;objectsRemoved;objectsUpdated;undoStateChange;objectsInViewportChange;viewportChange;awarenessChange;notificationsChange;loadingChange;forceUpdate=0;isContentHidden=!0;async triggerSelectionChange(){this.objectsSelectionChange.emit()}handleWheel(t){if(this.core.store.isDisabled)return;this.core.store.state.isContextMenuVisible&&this.hideContextMenu();const e=this.core.getObjectFromPointerEvent(t);e&&I.isClass(e,"KritzelCustomElement")&&Ee.shouldKeepWheelInCustomElement(t,e)||(t.ctrlKey?this.isZoomingEnabled&&this.viewport.handleWheel(t):this.isPanningEnabled&&this.viewport.handleWheel(t),this.core.store.state?.activeTool?.handleWheel(t))}handlePointerDown(t){this.core.store.isDisabled||this.isEmbeddedCustomElementInteraction(t)||(l.isTouchDevice()&&tt.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=Tt.throttle((t=>{this.viewport.handlePointerMove(t),this.core.store.state?.activeTool?.handlePointerMove(t)}),16);handlePointerMove(t){this.core.store.isDisabled||t.buttons>0&&!this.core.store.state.pointers.has(t.pointerId)||(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))}isEmbeddedCustomElementInteraction(t){const e=t.composedPath(),i=e.find((t=>t instanceof HTMLElement&&t.classList.contains("object")));if(!i?.id)return!1;const n=this.core.store.objects.findById(i.id);if(!n||!K.isInstanceOf(n,"KritzelCustomElement"))return!1;if(!this.core.store.selectionGroup?.objects?.some((t=>t.id===n.id)))return!1;if(!0!==n.isInteractive)return!1;const r=[];return n.element instanceof HTMLElement&&r.push(n.element),n.elementRef instanceof HTMLElement&&r.push(n.elementRef),0!==r.length&&r.some((t=>this.isNativeInteractiveEmbeddedTarget(e,t)))}isNativeInteractiveEmbeddedTarget(t,e){const i=t.findIndex((t=>t===e));if(-1===i)return!1;for(const e of t.slice(0,i))if(e instanceof HTMLElement&&e.matches('input, button, textarea, select, a[href], [contenteditable="true"], [contenteditable=""]'))return!0;return!1}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.shouldHandleGlobalShortcutEvent(t)&&this.keyHandler.handleKeyDown(t)}handleKeyUp(t){!this.core.store.isDisabled&&this.shouldHandleGlobalShortcutEvent(t)&&this.keyHandler.handleKeyUp(t)}handleCopy(t){!this.core.store.isDisabled&&this.shouldHandleGlobalShortcutEvent(t)&&(!this.core.store.selectionGroup||this.core.store.activeText||this.core.store.activeShape||(t.cancelable&&t.preventDefault(),this.core.clipboardManager.copy(t),this.core.rerender()))}handleCut(t){!this.core.store.isDisabled&&this.shouldHandleGlobalShortcutEvent(t)&&(!this.core.store.selectionGroup||this.core.store.activeText||this.core.store.activeShape||(t.cancelable&&t.preventDefault(),this.core.clipboardManager.cut(t)))}handlePaste(t){!this.core.store.isDisabled&&this.shouldHandleGlobalShortcutEvent(t)&&(this.core.store.activeText||this.core.store.activeShape||(t.cancelable&&t.preventDefault(),this.core.clipboardManager.paste(void 0,void 0,t)))}shouldHandleGlobalShortcutEvent(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=e[0];return!(i instanceof HTMLElement&&i.matches?.('input, textarea, select, [contenteditable="true"], [contenteditable=""]'))}preventDoubleTapZoomOnTouchDevices(t){t.cancelable&&t.preventDefault()}async registerTool(t,e,i){if("function"!=typeof e)return console.error(`Failed to register tool "${t}": Tool class must be a constructor function`),null;if(this.core.toolRegistry.hasTool(t)){const e=this.core.toolRegistry.getTool(t);return i&&this.applyToolConfig(e,i),e}const n=this.core.toolRegistry.registerTool(t,e);return i&&this.applyToolConfig(n,i),Promise.resolve(n)}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 changeActiveToolByName(t){const e=this.core.toolRegistry.getTool(t);e?await this.changeActiveTool(e):console.warn(`[KritzelEngine] No tool registered with name: ${t}`)}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.clipboardManager.copy()}async cut(){this.core.clipboardManager.cut()}async paste(t,e){"granted"===await this.core.permissionManager.requestPermission("clipboard-read")?this.core.clipboardManager.paste(t,e):this.notificationsChange.emit({type:"error",message:"Clipboard read permission is required to paste content. Please grant permission and try again.",id:I.generateUUID()})}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 A)),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 openContextMenu(t){this.contextMenuHandler.open(t)}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=t.scale??this.core.store.state.scale,t.zIndex=this.core.store.currentZIndex,t.workspaceId=this.core.store.state.activeWorkspace.id,K.isInstanceOf(t,"KritzelImage")&&await t.prepareForInsert(),K.isInstanceOf(t,"KritzelText")){const e=t.content;t.editor=t.createEditor(),e&&t.setContent(e)}if(K.isInstanceOf(t,"KritzelGroup")&&t._pendingChildren.length>0){const e=new Map,i=[],n=t=>{if(0===t._pendingChildren.length)return;const r=t._pendingChildren;t._pendingChildren=[],t.childIds=[],r.forEach((r=>{const o=r.id;r.id=r.generateId(),r._core=this.core,r.scale=r.scale??this.core.store.state.scale,r.zIndex=this.core.store.currentZIndex,r.workspaceId=this.core.store.state.activeWorkspace.id,e.set(o,r.id),t.childIds.push(r.id),i.push(r),K.isInstanceOf(r,"KritzelGroup")&&n(r)}))};n(t),i.forEach((t=>{K.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.emitObjectsChange(),this.emitObjectsAdded([t]),t}async addObjects(t){if(0===t.length)return[];for(const e of t)e._core=this.core,K.isInstanceOf(e,"KritzelImage")&&await e.prepareForInsert();return this.core.store.objects.transaction((()=>{for(const e of t){if(e.id=e.generateId(),e._core=this.core,e.zIndex=this.core.store.currentZIndex,e.workspaceId=this.core.store.state.activeWorkspace.id,K.isInstanceOf(e,"KritzelText")){const t=e.content;e.editor=e.createEditor(),t&&e.setContent(t)}if(K.isInstanceOf(e,"KritzelGroup")&&e._pendingChildren.length>0){const t=new Map,i=[],n=e=>{if(0===e._pendingChildren.length)return;const r=e._pendingChildren;e._pendingChildren=[],e.childIds=[],r.forEach((r=>{const o=r.id;r.id=r.generateId(),r._core=this.core,r.zIndex=this.core.store.currentZIndex,r.workspaceId=this.core.store.state.activeWorkspace.id,t.set(o,r.id),e.childIds.push(r.id),i.push(r),K.isInstanceOf(r,"KritzelGroup")&&n(r)}))};n(e),i.forEach((e=>{K.isInstanceOf(e,"KritzelLine")&&(e.startAnchor&&t.has(e.startAnchor.objectId)&&(e.startAnchor={objectId:t.get(e.startAnchor.objectId)}),e.endAnchor&&t.has(e.endAnchor.objectId)&&(e.endAnchor={objectId:t.get(e.endAnchor.objectId)}))})),i.forEach((t=>{this.core.addObject(t)})),e.finalize(),this.core.anchorManager.rebuildIndex()}this.core.addObject(e)}})),this.core.rerender(),await new Promise((t=>{requestAnimationFrame((()=>requestAnimationFrame((()=>t()))))})),this.emitObjectsChange(),this.emitObjectsAdded(t),t}async updateObject(t,e){return this.core.deselectAllObjects(),this.core.updateObject(t,e),this.core.rerender(),this.emitObjectsChange(),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.emitObjectsChange(),this.emitObjectsRemoved([t]),t):null}async removeObjects(t){const e=this.core.store.objects;return e&&0!==t.length?(e.transaction((()=>{for(const e of t)this.core.removeObject(e)})),this.core.rerender(),this.emitObjectsChange(),this.emitObjectsRemoved(t),t):[]}async getSelectedObjects(){const t=this.core.store.selectionGroup;return t?t.objects:[]}async getDisplayableShortcuts(){return this.keyHandler.getDisplayableShortcuts()}async selectObjects(t){const e=this.core.toolRegistry.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=this.core.toolRegistry.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 panToObject(t){this.viewport.panTo(t.centerX,t.centerY)}async backToContent(){return this.viewport.centerFitNearestContent(20)}async centerAllObjects(t=!0){return this.viewport.centerFitAllObjects(t)}async centerObjects(t,e=!0){return this.viewport.centerFitObjects(t,e)}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 zoomIn(t,e){this.viewport.zoomIn(t,e)}async zoomOut(t,e){this.viewport.zoomOut(t,e)}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 getObjectsInViewport(){return this.core.getObjectsInViewport()}async getScreenshot(t="png",e){if(!this.host)return null;const i={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},n={filter:t=>!("KRITZEL-CONTEXT-MENU"===t.tagName||"KRITZEL-AWARENESS-CURSORS"===t.tagName||t.classList&&t.classList.contains("debug-panel"))};let r;(e?.includeBackground??1)||(n.backgroundColor="transparent");try{r="svg"===t?await Ae(this.host,n):await async function(t,e={}){return(await async function(t,e={}){const{width:i,height:n}=ie(t,e),r=await Ae(t,e),o=await re(r),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||n;return s.width=c*l,s.height=h*l,e.skipAutoScale||function(t){(t.width>ne||t.height>ne)&&(t.width>ne&&t.height>ne?t.width>t.height?(t.height*=ne/t.width,t.width=ne):(t.width*=ne/t.height,t.height=ne):t.width>ne?(t.height*=ne/t.width,t.width=ne):(t.width*=ne/t.height,t.height=ne))}(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,n)}finally{this.core.store.state.objects=i.objects,this.core.store.state.activeWorkspace=i.activeWorkspace,this.core.store.state.workspaces=i.workspaces,this.core.store.state.activeTool=i.activeTool,this.core.store.state.isReady=i.isReady,this.core.store.state.translateX=i.translateX,this.core.store.state.translateY=i.translateY,this.core.store.state.scale=i.scale,this.core.rerender()}return r}async exportViewportAsPng(t){try{const e=`${this.core.store.state?.activeWorkspace?.name||"workspace"}-${(new Date).toISOString().replace(/[:.]/g,"-")}.png`,i=await this.getScreenshot("png",t);if(!i)return void console.error("Failed to export viewport as PNG: screenshot could not be generated");const n=document.createElement("a");n.download=e,n.href=i,n.click()}catch(t){console.error("Failed to export viewport as PNG:",t)}}async exportViewportAsSvg(t){try{const e=`${this.core.store.state?.activeWorkspace?.name||"workspace"}-${(new Date).toISOString().replace(/[:.]/g,"-")}.svg`,i=await this.getScreenshot("svg",t);if(!i)return void console.error("Failed to export viewport as SVG: screenshot could not be generated");const n=document.createElement("a");n.download=e,n.href=i,n.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(),n=await Zt.resolveImageDataUrls(e,this.core.assetResolver);return Zt.generateSvg(e,{theme:i,padding:t?.padding??0,includeXmlDeclaration:!0,rasterSafeForCanvas:t?.rasterSafeForCanvas??!1,imageDataUrls:n})}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`,n=new Blob([e],{type:"image/svg+xml;charset=utf-8"}),r=URL.createObjectURL(n),o=document.createElement("a");o.download=i,o.href=r,o.click(),URL.revokeObjectURL(r)}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,rasterSafeForCanvas:!0});if(!e)return null;const i=t?.scale??2;return new Promise(((t,n)=>{const r=new Image,o=new Blob([e],{type:"image/svg+xml;charset=utf-8"}),s=URL.createObjectURL(o);r.onload=()=>{const e=document.createElement("canvas");e.width=r.width*i,e.height=r.height*i;const o=e.getContext("2d");if(!o)return URL.revokeObjectURL(s),void n(new Error("Failed to get canvas context"));o.scale(i,i),o.drawImage(r,0,0),URL.revokeObjectURL(s),t(e.toDataURL("image/png"))},r.onerror=()=>{URL.revokeObjectURL(s),n(new Error("Failed to load SVG for PNG conversion"))},r.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`,n=document.createElement("a");n.download=i,n.href=e,n.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!==et&&console.warn(`Workspace version mismatch: expected ${et}, got ${e.version}`);const i=I.generateUUID();let n=e.viewport||{centerWorldX:0,centerWorldY:0,scale:1};if("translateX"in n&&!("centerWorldX"in n)){const t=n.scale??1;n={centerWorldX:-(n.translateX??0)/t,centerWorldY:-(n.translateY??0)/t,scale:t}}const r=new D(i,e.name||"Imported Workspace",n);if(this.core.createWorkspace(r),this.workspacesChange.emit(this.core.store.state.workspaces),this.core.beforeWorkspaceChange(),await this.core.initializeWorkspace(r),e.objects&&Array.isArray(e.objects)){const t=new _t(this.core);for(const n of e.objects){const e=t.revive(n);e&&(e.workspaceId=i,this.core.addObject(e))}}this.core.rerender(),this.activeWorkspaceChange.emit(r)}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!==et&&console.warn(`Workspace version mismatch: expected ${et}, got ${e.version}`);const i=this.core.store.state.activeWorkspace;if(!i)throw new Error("Cannot load objects: no active workspace is loaded");const n=i.id;let r=0;if(e.objects&&Array.isArray(e.objects)){const t=new _t(this.core);for(const i of e.objects){const e=t.revive(i);e&&(e.workspaceId=n,this.core.addObject(e),r++)}}return this.core.rerender(),r}async downloadAsJson(t){try{const e=await this.exportAsJson(),i=this.core.store.state?.activeWorkspace?.name||"workspace",n=(new Date).toISOString().replace(/[:.]/g,"-"),r=t||`${i}-${n}`,o=new Blob([e],{type:"application/json;charset=utf-8"}),s=URL.createObjectURL(o),a=document.createElement("a");a.download=`${r}.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 n=()=>{i.removeEventListener("change",r),i.removeEventListener("cancel",o),document.body.removeChild(i)},r=async i=>{const r=i.target,o=r.files?.[0];if(!o)return n(),void t();try{const i=new FileReader;i.onload=async i=>{try{const e=i.target?.result;await this.importFromJson(e),n(),t()}catch(t){n(),console.error("Failed to import workspace from file:",t),e(t)}},i.onerror=()=>{n(),console.error("Failed to read file:",i.error),e(i.error)},i.readAsText(o)}catch(t){n(),console.error("Failed to process file:",t),e(t)}},o=()=>{n(),t()};i.addEventListener("change",r),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 D(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()}async saveSettings(t){const e=this.core.getStorageKey("kritzel-settings");localStorage.setItem(e,JSON.stringify(t))}async loadSettings(){const t=this.core.getStorageKey("kritzel-settings"),e=localStorage.getItem(t);if(!e)return null;try{return JSON.parse(e)}catch{return null}}async registerLocales(t){this.core.localizationManager.registerLocales(t),this.core.localizationManager.setLocale(this.core.localizationManager.currentLocale)}async setLocale(t){this.locale=t,this.core.localizationManager.setLocale(t)}async getLocale(){return this.core.localizationManager.currentLocale}async getAvailableLocales(){return this.core.localizationManager.getAvailableLocales()}async getAvailableLocaleOptions(){return this.core.localizationManager.getAvailableLocaleOptions()}async t(t,e){return this.core.localizationManager.translate(t,e)}async getResolvedTerms(){return this.core.localizationManager.getAllTerms()}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;_hasLoggedUnlicensedWelcomeBanner=!1;_previousVisibleCustomElements=new Set;_defaultUndoState={canUndo:!1,canRedo:!1,undoStackSize:0,redoStackSize:0};_objectDistanceFadeNearScale=1;_objectDistanceFadeFarScale=.15;_objectDistanceFadeMinOpacity=0;_objectDistanceFadeCloseStartScale=2;_objectDistanceFadeCloseMaxScale=4;_objectDistanceFadeCloseMinOpacity=0;syncLoadingState(){const t=this._isWorkspaceLoading||this.isLoading;this.core.store.state.isLoading=t,this.isContentHidden!==t&&(this.isContentHidden=t),this.loadingChange.emit(t)}applyToolConfig(t,e){if(Object.entries(e).forEach((([e,i])=>{t[e]=i})),"palettes"in e&&"type"in e){const i=e.palettes[e.type];i&&(t.palette=i)}if("sizes"in e&&null!=e.sizes&&"type"in e){const i=e,n=i.sizes?.[i.type];n&&(t.sizes=n)}}get isSelecting(){return this.core.store.state.activeTool instanceof c&&this.core.store.state.isSelecting}get isSelectionActive(){return this.core.store.state.activeTool instanceof c&&null!==this.core.store.selectionGroup}constructor(e){t(this,e),this.isEngineReady=n(this,"isEngineReady"),this.activeToolChange=n(this,"activeToolChange"),this.objectsSelectionChange=n(this,"objectsSelectionChange"),this.workspacesChange=n(this,"workspacesChange"),this.activeWorkspaceChange=n(this,"activeWorkspaceChange"),this.longpress=n(this,"longpress"),this.objectsChange=n(this,"objectsChange"),this.objectsAdded=n(this,"objectsAdded"),this.objectsRemoved=n(this,"objectsRemoved"),this.objectsUpdated=n(this,"objectsUpdated"),this.undoStateChange=n(this,"undoStateChange"),this.objectsInViewportChange=n(this,"objectsInViewportChange"),this.viewportChange=n(this,"viewportChange"),this.awarenessChange=n(this,"awarenessChange"),this.notificationsChange=n(this,"notificationsChange"),this.loadingChange=n(this,"loadingChange"),this.core=new Yt(this)}disconnectedCallback(){this.throttledPointerMoveMulti.cancel(),this.core.store.allObjects&&this.core.store.allObjects.forEach((t=>{K.isInstanceOf(t,"KritzelCustomElement")&&t.unmount()})),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(),this.core.licenseManager.destroy()}componentWillLoad(){this.core.setEditorId(this.editorId),this.themes&&this.themes.length>0&&this.core.themeManager.registerThemes(this.themes);const t=this.host.closest("kritzel-editor");this.core.themeManager.injectThemeEarly(t||this.host),this.locales&&this.locales.length>0&&this.core.localizationManager.registerLocales(this.locales),this.core.localizationManager.setFallbackLocale(this.fallbackLocale),this.core.localizationManager.setLocale(this.locale),this.core.licenseManager.validate(this.licenseKey),this.core.licenseManager.startPeriodicValidation(),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 Et(this.core,this.globalContextMenuItems??[],this.objectContextMenuItems??[]),this.keyHandler=new At(this.core),this.viewport=new jt(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.logUnlicensedWelcomeBanner(),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}logUnlicensedWelcomeBanner(){this.core.licenseManager.isLicensed||this._hasLoggedUnlicensedWelcomeBanner||(this._hasLoggedUnlicensedWelcomeBanner=!0,console.info("%c👋 Welcome to Kritzel","color: #007AFF; font-weight: 700;"),console.info("This version of Kritzel is not licensed. Get a license at: https://kritzel.io"))}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,n=i??(e?.skipFallbackCreation?"__NO_FALLBACK__":"__AUTO__");if(i&&this.core.store.state.activeWorkspace?.id===i)return;if(this._workspaceInitializationPromise&&this._workspaceInitializationTargetKey===n)return void await this._workspaceInitializationPromise;this._isWorkspaceLoading=!0,this.syncLoadingState();const r=this.core.initializeWorkspace(t,e);this._workspaceInitializationPromise=r,this._workspaceInitializationTargetKey=n;try{await r;const t=this.core.store.objects;await(t?.whenNetworkSynced())}finally{this._workspaceInitializationPromise===r&&(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 c||(this.core.clearSelection(),this.core.store.objects?.remove((t=>t instanceof A)),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 h||this.core.resetActiveText(),t instanceof w||this.core.resetActiveShape(),this.core.store.state.skipContextMenu=!1,t&&this.activeToolChange.emit(t),_.forceHideKeyboard(),this.core.rerender()}getObjectDistanceFadeMultiplier(t,e){if(!this.isObjectDistanceFadingActive)return 1;const i=Math.max(Number.isFinite(e)?e:1,Number.EPSILON)/Math.max(Number.isFinite(t)?t:1,Number.EPSILON),n=this.getFarDistanceFadeMultiplier(i),r=this.getCloseDistanceFadeMultiplier(i);return Math.min(n,r)}getFarDistanceFadeMultiplier(t){if(t>=this._objectDistanceFadeNearScale)return 1;if(t<=this._objectDistanceFadeFarScale)return this._objectDistanceFadeMinOpacity;const e=(this._objectDistanceFadeNearScale-t)/(this._objectDistanceFadeNearScale-this._objectDistanceFadeFarScale);return 1-e*e*(3-2*e)*(1-this._objectDistanceFadeMinOpacity)}getCloseDistanceFadeMultiplier(t){if(t<=this._objectDistanceFadeCloseStartScale)return 1;if(t>=this._objectDistanceFadeCloseMaxScale)return this._objectDistanceFadeCloseMinOpacity;const e=(t-this._objectDistanceFadeCloseStartScale)/(this._objectDistanceFadeCloseMaxScale-this._objectDistanceFadeCloseStartScale);return 1-e*e*(3-2*e)*(1-this._objectDistanceFadeCloseMinOpacity)}shouldApplyDistanceFade(t){return!K.isInstanceOf(t,"KritzelSelectionGroup")&&!K.isInstanceOf(t,"KritzelSelectionBox")}getObjectEffectiveOpacity(t,e){const i=Number.isFinite(t.opacity)?t.opacity:1,n=this.shouldApplyDistanceFade(t)?this.getObjectDistanceFadeMultiplier(t.scale,e):1;return{multiplied:(t.markedForRemoval?.5:1)*i*n,overridden:((t.markedForRemoval?.5:i)*n).toString()}}getSelectionHandleCapabilities(t){const e=K.isInstanceOf(t,"KritzelSelectionGroup")?t.objects:[t];return{canRenderResizeHandles:e.every((t=>!1!==t.isResizable)),canRenderRotationHandle:e.every((t=>!1!==t.isRotatable))}}render(){if(!this.viewport)return e(i,null);const t=this.core.themeManager.getStoredTheme(),n=window.getComputedStyle(this.host).getPropertyValue("--kritzel-selection-handle-size").trim()||"6px",r=parseFloat(n),o=2*r<14?14:r,s=this.core.store.state.scale,l=this.core.store.state.viewportWidth/2+this.core.store.state.translateX,c=this.core.store.state.viewportHeight/2+this.core.store.state.translateY,h=this.core.store.objectsInViewport,u=t=>this.core.store.state.isScaling||K.isInstanceOf(t,"KritzelSelectionGroup")?"none":"auto",d=t=>t.markedForRemoval||K.isInstanceOf(t,"KritzelSelectionGroup")&&1===t.objects.length&&K.isInstanceOf(t.objects[0],"KritzelCustomElement")?"none":"auto",f=new Set;return h.forEach((t=>{K.isInstanceOf(t,"KritzelCustomElement")&&f.add(t.id)})),this._previousVisibleCustomElements.forEach((t=>{if(!f.has(t)){const e=this.core.store.objects.findById(t);e&&K.isInstanceOf(e,"KritzelCustomElement")&&e.unmount()}})),this._previousVisibleCustomElements=f,this.core.cursorManager.applyCursor(),this.core.store.state.hasViewportChanged&&(this.viewportChange.emit(this.viewport.getViewport()),this.core.store.totalObjectCount>0&&this.emitObjectsInViewportChange()),e(i,{class:{"is-content-hidden":this.isContentHidden}},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: (",l.toFixed(2),", ",c.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})`}},h?.map((i=>{const{multiplied:n,overridden:l}=this.getObjectEffectiveOpacity(i,s);return e("div",{key:i.id,id:i.id,class:"object",style:{transform:i?.transformationMatrix,transformOrigin:"top left",position:"absolute",zIndex:this.core.displaySelectionLineUI(i)?"10001":i.zIndex.toString(),pointerEvents:u(i)}},K.isInstanceOf(i,"KritzelPath")&&e("svg",{ref:t=>t&&i.mount(t),xmlns:"http://www.w3.org/2000/svg",style:{height:i?.totalHeight+"px",width:i?.totalWidth+"px",left:"0",top:"0",position:"absolute",transform:0!==i.rotationDegrees?`rotate(${i.rotationDegrees}deg)`:void 0,transformOrigin:0!==i.rotationDegrees?`${i.totalWidth/2}px ${i.totalHeight/2}px`:void 0,pointerEvents:i.markedForRemoval?"none":"auto",overflow:"visible"},viewBox:i?.viewBox},e("path",{d:i?.d,fill:a.applyOpacity(i.fill,n,t),stroke:a.applyOpacity(i?.stroke,n,t),"shape-rendering":i.isLowRes()?"optimizeSpeed":"auto"})),K.isInstanceOf(i,"KritzelLine")&&e("svg",{ref:t=>t&&i.mount(t),xmlns:"http://www.w3.org/2000/svg",style:{height:i?.totalHeight+"px",width:i?.totalWidth+"px",left:"0",top:"0",position:"absolute",transform:0!==i.rotationDegrees?`rotate(${i.rotationDegrees}deg)`:void 0,transformOrigin:0!==i.rotationDegrees?`${i.totalWidth/2}px ${i.totalHeight/2}px`:void 0,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"),n),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"),n),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,n,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})),K.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:l,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()}),K.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:l,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)}})),K.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:l,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"}}),K.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:d(i)}}),K.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"}}),K.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:l,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"}})),K.isInstanceOf(i,"KritzelShape")&&(()=>{const r=a.resolveThemeColor(i.fillColor,t),o=a.resolveThemeColor(i.strokeColor,t),s=!!r&&"transparent"!==r&&o===r;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,n,t),stroke:s?"none":a.applyOpacity(i.strokeColor,n,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&&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"}},"scale: ",i.scale),e("div",{style:{whiteSpace:"nowrap",fontSize:"10px"}},"rotationDegrees: ",i.rotationDegrees),e("div",{style:{whiteSpace:"nowrap",fontSize:"10px"}},"zIndex: ",i.zIndex),e("div",{style:{whiteSpace:"nowrap",fontSize:"10px"}},"isSelected: ",i.isSelected?"true":"false"),K.isInstanceOf(i,"KritzelCustomElement")&&e("div",null,e("div",{style:{whiteSpace:"nowrap",fontSize:"10px"}},"isInteractive: ",i.isInteractive?"true":"false")),K.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 n=K.isInstanceOf(i,"KritzelSelectionGroup"),s=this.core.store.objects?.localClientId,l=this.core.store.objects?.awareness?.getStates(),c=n&&(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&&(n&&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)",f=null!=i.endAnchor,p=this.core.store.state.snapCandidate??this.core.store.state.snapPreviewCandidate,g=null!=i.startAnchor||"start"===p?.endpoint,b=f||"end"===p?.endpoint,v=this.core.displaySelectionLineUI(i)?"10000":(i.zIndex+1).toString(),m=i.scale??1,{canRenderResizeHandles:k,canRenderRotationHandle:y}=this.getSelectionHandleCapabilities(i);return e("svg",{xmlns:"http://www.w3.org/2000/svg",style:{zIndex:v,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&&K.isInstanceOf(i,"KritzelSelectionGroup")&&1===i.objects.length&&K.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"}},k&&e("g",null,e("rect",{class:"resize-handle top-left",x:""+-(r-1)*m/this.core.store.state?.scale,y:""+-(r-1)*m/this.core.store.state?.scale,width:""+2*(r-1)*m/this.core.store.state?.scale,height:""+2*(r-1)*m/this.core.store.state?.scale,style:{fill:"var(--kritzel-selection-handle-color, #ffffff)",stroke:d,strokeWidth:`calc(2px * ${m} / ${this.core.store.state?.scale})`,paintOrder:"fill"}}),e("rect",{class:"resize-handle-overlay top-left",x:""+-o*m/this.core.store.state?.scale,y:""+-o*m/this.core.store.state?.scale,width:""+2*o*m/this.core.store.state?.scale,height:""+2*o*m/this.core.store.state?.scale,style:{fill:"transparent",paintOrder:"fill"}}),e("rect",{class:"resize-handle top-right",x:""+(i.totalWidth-(r-1)*m/this.core.store.state?.scale),y:""+-(r-1)*m/this.core.store.state?.scale,width:""+2*(r-1)*m/this.core.store.state?.scale,height:""+2*(r-1)*m/this.core.store.state?.scale,style:{fill:"var(--kritzel-selection-handle-color, #ffffff)",stroke:d,strokeWidth:`calc(2px * ${m} / ${this.core.store.state?.scale})`,paintOrder:"fill"}}),e("rect",{class:"resize-handle-overlay top-right",x:""+(i.totalWidth-o*m/this.core.store.state?.scale),y:""+-o*m/this.core.store.state?.scale,width:""+2*o*m/this.core.store.state?.scale,height:""+2*o*m/this.core.store.state?.scale,style:{fill:"transparent",paintOrder:"fill"}}),e("rect",{class:"resize-handle bottom-left",x:""+-(r-1)*m/this.core.store.state?.scale,y:""+(i.totalHeight-(r-1)*m/this.core.store.state?.scale),width:""+2*(r-1)*m/this.core.store.state?.scale,height:""+2*(r-1)*m/this.core.store.state?.scale,style:{fill:"var(--kritzel-selection-handle-color, #ffffff)",stroke:d,strokeWidth:`calc(2px * ${m} / ${this.core.store.state?.scale})`,paintOrder:"fill"}}),e("rect",{class:"resize-handle-overlay bottom-left",x:""+-o*m/this.core.store.state?.scale,y:""+(i.totalHeight-o*m/this.core.store.state?.scale),width:""+2*o*m/this.core.store.state?.scale,height:""+2*o*m/this.core.store.state?.scale,style:{fill:"transparent",paintOrder:"fill"}}),e("rect",{class:"resize-handle bottom-right",x:""+(i.totalWidth-(r-1)*m/this.core.store.state?.scale),y:""+(i.totalHeight-(r-1)*m/this.core.store.state?.scale),width:""+2*(r-1)*m/this.core.store.state?.scale,height:""+2*(r-1)*m/this.core.store.state?.scale,style:{fill:"var(--kritzel-selection-handle-color, #ffffff)",stroke:d,strokeWidth:`calc(2px * ${m} / ${this.core.store.state?.scale})`,paintOrder:"fill"}}),e("rect",{class:"resize-handle-overlay bottom-right",x:""+(i.totalWidth-o*m/this.core.store.state?.scale),y:""+(i.totalHeight-o*m/this.core.store.state?.scale),width:""+2*o*m/this.core.store.state?.scale,height:""+2*o*m/this.core.store.state?.scale,style:{fill:"transparent",paintOrder:"fill"}})),y&&e("g",null,e("line",{x1:i.totalWidth/2,y1:"0",x2:i.totalWidth/2,y2:-15*m/this.core.store.state?.scale,style:{stroke:u,strokeWidth:`calc(var(--kritzel-selection-border-width, 2px) * ${m} / ${this.core.store.state?.scale})`}}),e("circle",{class:"rotation-handle",cx:i.totalWidth/2,cy:-15*m/this.core.store.state?.scale,r:""+(r-1)*m/this.core.store.state?.scale,style:{fill:"var(--kritzel-selection-handle-color, #ffffff)",stroke:d,strokeWidth:`calc(2px * ${m} / ${this.core.store.state?.scale})`,paintOrder:"fill"}}),e("circle",{class:"rotation-handle-overlay",cx:i.totalWidth/2,cy:-15*m/this.core.store.state?.scale,r:""+o*m/this.core.store.state?.scale,style:{fill:"transparent",paintOrder:"fill"}})))),this.core.displaySelectionLineUI(i)&&K.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:""+(r-1)*i.scale/this.core.store.state?.scale,style:{fill:g?d:"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:""+(r-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:""+(r-1)*i.scale/this.core.store.state?.scale,style:{fill:b?d:"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.getSnapIndicatorRenderData()??this.core.anchorManager.getSnapPreviewRenderData();if(!t)return null;const i=null!=this.core.anchorManager.getSnapIndicatorRenderData();return 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:i?"var(--kritzel-snap-line-stroke, rgba(0, 0, 0, 0.2))":"var(--kritzel-snap-line-stroke, rgba(0, 0, 0, 0.12))",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:i?"var(--kritzel-snap-line-stroke, rgba(0, 0, 0, 0.2))":"var(--kritzel-snap-line-stroke, rgba(0, 0, 0, 0.12))",strokeWidth:t.lineStrokeWidth,strokeDasharray:t.dashArray,strokeLinecap:"round"}}),e("circle",{cx:t.centerX,cy:t.centerY,r:t.indicatorRadius,style:{fill:i?"var(--kritzel-snap-indicator-fill, rgba(59, 130, 246, 0.3))":"rgba(59, 130, 246, 0.18)",stroke:i?"var(--kritzel-snap-indicator-stroke, #007bff)":"rgba(59, 130, 246, 0.5)",strokeWidth:t.indicatorStrokeWidth}})))})(),(()=>{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(59, 130, 246, 0.3))",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})()),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:"absolute",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.contextMenuWorldX,y:this.core.store.state.contextMenuWorldY},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}),!this.core.licenseManager.isLicensed&&e("kritzel-watermark",{core:this.core,label:this.core.localizationManager.translate("watermark.poweredBy")}))}static get watchers(){return{workspace:[{onWorkspaceChange:0}],activeWorkspaceId:[{onActiveWorkspaceIdChange:0}],syncConfig:[{onSyncConfigChange:0}],assetStorageConfig:[{onAssetStorageConfigChange:0}],user:[{onUserChange:0}],globalContextMenuItems:[{onGlobalContextMenuItemsChange:0}],objectContextMenuItems:[{onObjectContextMenuItemsChange:0}],scaleMax:[{validateScaleMax:0}],scaleMin:[{validateScaleMin:0}],cursorTarget:[{onCursorTargetChange:0}],lockDrawingScale:[{onLockDrawingScaleChange:0}],isObjectDistanceFadingActive:[{onIsObjectDistanceFadingActiveChange:0}],theme:[{onThemeChange:0}],licenseKey:[{onLicenseKeyChange:0}],themes:[{onThemesChange:0}],locale:[{onLocaleChange:0}],locales:[{onLocalesChange:0}],fallbackLocale:[{onFallbackLocaleChange:0}],viewportBoundaryLeft:[{onViewportBoundaryLeftChange:0}],viewportBoundaryRight:[{onViewportBoundaryRightChange:0}],viewportBoundaryTop:[{onViewportBoundaryTopChange:0}],viewportBoundaryBottom:[{onViewportBoundaryBottomChange:0}],debugInfo:[{onDebugInfoChange:0}],isLoading:[{onIsLoadingChange:0}]}}};_e.style=":host{display:block;position:relative;height:100%;width:100%;overflow:hidden;isolation:isolate;background-color:var(--kritzel-engine-background-color, #ffffff);opacity:1;transition:opacity 200ms ease}:host(.is-content-hidden){opacity:0;pointer-events:none}:host,:host *{touch-action:none;user-select:none}.ProseMirror{outline:none}p,h1,h2,h3,h4,h5,h6,blockquote,pre{margin:0;padding:0}.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 Oe=class{constructor(e){t(this,e),this.exportPng=n(this,"exportPng"),this.exportSvg=n(this,"exportSvg"),this.exportJson=n(this,"exportJson")}workspaceName="workspace";terms={};isDialogOpen=!1;previewUrl;isLoading=!1;activeTab="viewport";exportFilename="";viewportExportFormat="png";exportPng;exportSvg;exportJson;get tabs(){return[{id:"viewport",label:this.terms["export.tabs.viewport"]??"Export Viewport"},{id:"workspace",label:this.terms["export.tabs.workspace"]??"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:this.terms["export.filename.label"]??"Filename",value:this.exportFilename,placeholder:this.terms["export.filename.placeholder"]??"Enter filename",suffix:`.${this.viewportExportFormat}`,onValueChange:this.handleFilenameChange}),e("div",{class:"format-selection"},e("label",null,this.terms["export.format.label"]??"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:this.terms["export.filename.label"]??"Filename",value:this.exportFilename,placeholder:this.terms["export.filename.placeholder"]??"Enter filename",suffix:".json",onValueChange:this.handleFilenameChange}))}render(){return e(i,{key:"5706e0f8688777826452ca0cf81e2581f6e2d14a"},e("kritzel-dialog",{key:"8d0d26a672604aec2b899a7ea05ab40031ac9c43",isOpen:this.isDialogOpen,dialogTitle:this.terms["export.dialogTitle"]??"Export",closable:!0,contained:!0,onDialogClose:this.closeDialog},e("div",{key:"a4c3f5a2961aca9dd5cba4045b8bd53635681ab0",class:"export-content"},e("kritzel-pill-tabs",{key:"51a40a8596e492130cc8fa4c977cde916d7d8392",tabs:this.tabs,value:this.activeTab,onValueChange:this.handleTabChange}),"viewport"===this.activeTab&&this.renderViewportExport(),"workspace"===this.activeTab&&this.renderWorkspaceExport(),e("button",{key:"a4b8e1503a0a8e682d10623bc334fcc70b5ea243",class:"export-primary-button",onClick:this.handleExport},this.terms["export.exportButton"]??"Export"))))}};Oe.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:var(--kritzel-button-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 De=class{constructor(e){t(this,e)}fontFamily="Arial, sans-serif";size=24;color="#000000";render(){return e(i,{key:"054371cac30a2433611139a670406b0a1e3b99ff"},e("div",{key:"b4f2142b3cb31d067f39952a38b6f665f28f63bf",class:"font-preview",style:{fontFamily:this.fontFamily,fontSize:`${this.size}px`,color:this.color}},"A"))}};De.style=":host{display:block}.font-preview{color:var(--kritzel-font-size-text-color, #333333);line-height:1;text-align:center;font-weight:bold}";const Fe=class{constructor(e){t(this,e),this.fontFamilyChange=n(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:"0123dbdff9b7051d2ebc9dcf8d1f9c7c4c161dc4"},e("kritzel-dropdown",{key:"5d4e289161502ecc60cef3d0c6d546a64817a12a",options:t,value:this.selectedFontFamily,onValueChanged:this.handleDropdownValueChange,selectStyles:{fontFamily:this.selectedFontFamily}}))}};Fe.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 Re=class{constructor(e){t(this,e),this.sizeChange=n(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:"56eb19367abe312bac3b626cfcae3b1ff6e90d21"},(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)"})))))}};Re.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 Le=class{constructor(e){t(this,e)}name;label;size=24;render(){const t=E.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`},"?"))}};Le.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 Pe=class{constructor(e){t(this,e),this.valueChange=n(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:"46a0a48902a06ad85edcbaad3679ce3fe9ba850c"},e("div",{key:"a6beaf920614aa959d2fbd68b7268afba8637358",class:"input-container"},this.label&&e("label",{key:"ca6d3fb3c22f1540795dbb0695ddd9b87cc05eee",class:"input-label"},this.label),e("div",{key:"78d116e82531a9cca996d594792245449bcaf9c8",class:{"input-wrapper":!0,"has-suffix":!!this.suffix}},e("input",{key:"0d10d6356dea3a11338172bbe8c3c878eefcc708",type:this.type,class:"text-input",value:this.inputValue,placeholder:this.placeholder,disabled:this.disabled,onInput:this.handleInput}),this.suffix&&e("span",{key:"0e6166ba8728efc1035302d7fb048306efbe5a68",class:"input-suffix"},this.suffix))))}static get watchers(){return{value:[{onValueChange:0}]}}};Pe.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:var(--kritzel-text-input-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 Be=class{constructor(e){t(this,e),this.valueChange=n(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 n="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:n,"stroke-width":"2","stroke-linecap":"round"}));const r=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:n,"stroke-width":"2","stroke-linecap":"round"}),e("g",{transform:"translate(2, 1) scale(1, 1)"},e("path",{d:r,fill:o?"none":n,stroke:n,"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:n,"stroke-width":"2","stroke-linecap":"round"}),e("g",{transform:"translate(12, 1)"},e("path",{d:r,fill:o?"none":n,stroke:n,"stroke-width":o?2:0,"stroke-linecap":"round","stroke-linejoin":"round"}))))}render(){const t=this.getStartEnding(),n=this.getEndEnding();return e(i,{key:"60115b8a2840ffe21e0846fdc2678c6ba24b22c0"},e("div",{key:"3b63aa05ca78699172c645fdd404efdc55bc4536",class:"endings-section"},e("div",{key:"9538369e8d2bb26600d6054ddbbc13d6c960bd56",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:"ecec29740c09a61190938bab4955ccde6b84cfa2",class:"endings-section"},e("div",{key:"ea054597c3e3566e7921f2c04c07d74e4f4331a1",class:"endings-row"},this.styles.map((t=>e("button",{class:{"ending-option":!0,selected:n===t},onClick:()=>this.handleEndChange(t),title:"none"===t?"No end arrow":`${t} end arrow`},this.renderEndingIcon(t,!1)))))))}};Be.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 We=class{constructor(e){t(this,e)}visible=!1;text="Loading...";render(){return e(i,{key:"b8c4784803ca5a0e6bf3f25c1d39139307bb6d50"},e("div",{key:"5a8a2c44f1800c0275d1a94aa0eb5c2854be63b5",class:{"loading-overlay":!0,visible:this.visible},"aria-hidden":this.visible?"false":"true"},e("span",{key:"04e33166e054d7a600a83dacd48e3fb50ab69d22",class:"loading-spinner"}),this.text))}};We.style=":host{display:contents}.loading-overlay{position:absolute;inset:0;z-index:var(--kritzel-loading-overlay-z-index, 9999);display:flex;align-items:center;justify-content:center;gap:10px;background-color:var(--kritzel-loading-overlay-background, rgba(255, 255, 255, 0.6));color:var(--kritzel-loading-overlay-color, #333);font-family:var(--kritzel-font-family, sans-serif);font-size:1.25rem;opacity:0;pointer-events:none;visibility:hidden}.loading-overlay.visible{pointer-events:all;visibility:visible;animation:kritzel-loading-fade-in 200ms ease-out var(--kritzel-loading-overlay-delay, 300ms) forwards}.loading-spinner{width:20px;height:20px;box-sizing:border-box;display:block;flex-shrink:0;border:2px solid var(--kritzel-loading-overlay-spinner-color, #cccccc);border-top-color:var(--kritzel-loading-overlay-spinner-active-color, #333333);border-radius:50%;animation:kritzel-loading-spin 0.6s linear infinite}@keyframes kritzel-loading-spin{to{transform:rotate(360deg)}}@keyframes kritzel-loading-fade-in{to{opacity:1}}";const Ve=class{constructor(e){t(this,e),this.providerLogin=n(this,"providerLogin"),this.dialogClosed=n(this,"dialogClosed")}get host(){return r(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:"5cedcb4fa0a9026338e930cfbbdbfa1df9853530"},e("kritzel-dialog",{key:"1502a2dc67630b0a1399ef6e8d1a2fdcd4d50913",dialogTitle:this.dialogTitle,isOpen:this.isDialogOpen,onDialogClose:this.closeDialog,size:"small",contained:!0},e("div",{key:"f84a888ccc0b1cb2052e30af56a08910da8d85b5",class:"login-content"},this.subtitle&&e("p",{key:"971040609c43efea30a7bfd0c1a3de2113f77a2b",class:"login-subtitle"},this.subtitle),e("div",{key:"ecb0c648ce0d9a8ca8b10e6a520273d817c7a0fe",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))))))))}};Ve.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 Ne=class{constructor(e){t(this,e),this.itemSelect=n(this,"itemSelect")}get host(){return r(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 n=this.items.map(((t,e)=>t.disabled?-1:e)).filter((t=>-1!==t)),r=n.indexOf(i);switch(t.key){case"ArrowDown":t.preventDefault(),this.focusTab(n[(r+1)%n.length]);break;case"ArrowUp":t.preventDefault(),this.focusTab(n[(r-1+n.length)%n.length]);break;case"Home":t.preventDefault(),this.focusTab(n[0]);break;case"End":t.preventDefault(),this.focusTab(n[n.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)),n="master-detail-panel",r=t?`tab-${t.id}`:void 0;return e(i,{key:"0edf50b0b853633b88bf481f97f22aceba9e163e"},e("div",{key:"21a0a3f81e5a60889ccd152c905cb41f52c3e037",class:{"master-detail-container":!0,"is-mobile-detail-visible":this.showMobileDetail}},e("nav",{key:"41f88248cc372c8cae4cb50a19edf462a01e43f2",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":n,"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:"f8447facf3dfdbd7772823654847e1b90b03f73e",id:n,class:"detail-panel",role:"tabpanel","aria-labelledby":r},e("button",{key:"3edc9784267613e6b3a706739bbb537161e4c747",class:"mobile-back-button",onClick:this.handleBackClick,"aria-label":"Back to menu"},e("kritzel-icon",{key:"ec0b4691735578525e5863842271366e04b13fb7",name:"chevron-left",size:20,class:"mobile-back-icon"}),"Back"),e("slot",{key:"c21fbaff78f98859b9756427125b60504d4bb630"}))))}static get watchers(){return{selectedItemId:[{watchSelectedItemId:0}]}}};Ne.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 Ke=class{constructor(e){t(this,e),this.itemSelect=n(this,"itemSelect"),this.itemSave=n(this,"itemSave"),this.itemCancel=n(this,"itemCancel"),this.itemToggleChildMenu=n(this,"itemToggleChildMenu"),this.itemCloseChildMenu=n(this,"itemCloseChildMenu"),this.close=n(this,"close")}get host(){return r(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:"27a90a3a8549517a2d6e341a5da13496bf714970",tabIndex:0,onClick:t=>t.stopPropagation()},this.openChildMenuItem&&e("div",{key:"c0c2351fac389f6676b38481eaacee553ca6867a",class:"has-open-child-overlay",onClick:this.onOverlayClick}),this.items.map((t=>e("kritzel-menu-item",{key:t.id,"data-testid":`menu-item-${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}))))}};Ke.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 Ue=class{constructor(e){t(this,e),this.itemSelect=n(this,"itemSelect"),this.itemSave=n(this,"itemSave"),this.itemCancel=n(this,"itemCancel"),this.itemToggleChildMenu=n(this,"itemToggleChildMenu"),this.itemCloseChildMenu=n(this,"itemCloseChildMenu")}get host(){return r(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(),l.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=()=>{l.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:"9d6653a630da5a3da38291d89d6d7d59d6994e02",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:"48a1678296e672c6c03fb3e1473c42d3a246d481",class:"menu-item-overlay"}),this.item.isEditing?this.renderEditMode():this.renderViewMode())}static get watchers(){return{item:[{onItemChange:0}]}}};Ue.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 He=class{constructor(e){t(this,e),this.itemSelect=n(this,"itemSelect")}get host(){return r(this)}visible=!1;items=[];icon="ellipsis-vertical";iconSize=24;offsetY=4;terms={};itemSelect;menuAnchor=null;isTouchDevice=l.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:"b7736b67210f2d2f6b54296dd680104548d61641",class:{mobile:this.isTouchDevice},style:{display:this.visible?"":"none"}},e("div",{key:"076ecc02a1469bd87cb27f63f1d41183bedb11d4",class:{"more-menu-wrapper":!0,visible:this.visible}},e("button",{key:"cefe02e440391eb079af7b8accc367a291e93d6a",class:"more-menu-button","data-testid":"more-menu-button",onClick:this.toggleMenu,"aria-label":this.terms["moreMenu.ariaLabel"]??"More options"},e("kritzel-icon",{key:"cb6f4dd0f37ac0fbf1e1c28a0dc06e097e38ee00",name:this.icon,size:this.iconSize})),e("kritzel-portal",{key:"29099deb5b56b1a1388caa81a3c7104a05ad66a7",anchor:this.menuAnchor,offsetY:this.offsetY,onClose:this.closeMenu},e("kritzel-menu",{key:"b77286ec05add0a20bbc46f99ac7210395d0d33d",items:this.visibleItems,onItemSelect:this.handleMenuItemSelect}))))}};He.style=":host{display:inline-flex;z-index:1}.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 Ge=class{constructor(e){t(this,e),this.dismiss=n(this,"dismiss"),this.hoverChange=n(this,"hoverChange")}notification;showTimestamp=!0;locale;dismiss;hoverChange;handleDismissClick=t=>{t.stopPropagation(),this.dismiss.emit()};handleMouseEnter=()=>{this.hoverChange.emit(!0)};handleMouseLeave=()=>{this.hoverChange.emit(!1)};get type(){return this.notification?.type??"info"}get role(){return"error"===this.type?"alert":"status"}getTypeLabel(t){switch(t){case"warning":return"Warning";case"error":return"Error";default:return"Info"}}formatTimestamp(t){if(!t||!this.showTimestamp)return null;const e=t instanceof Date?t:new Date(t);return Number.isNaN(e.getTime())?null:new Intl.DateTimeFormat(this.locale,{dateStyle:"medium",timeStyle:"short"}).format(e)}render(){const t=this.notification;if(!t)return e(i,null);const n=this.type,r=this.formatTimestamp(t.timestamp);return e(i,null,e("article",{class:{card:!0,[`type-${n}`]:!0},role:this.role,"aria-live":"polite",onMouseEnter:this.handleMouseEnter,onMouseLeave:this.handleMouseLeave},e("header",{class:"card-header"},e("span",{class:"type-pill"},this.getTypeLabel(n)),e("div",{class:"header-right"},r&&e("time",{class:"timestamp",dateTime:t.timestamp?.toISOString()},r),e("button",{class:"dismiss-button",type:"button","aria-label":"Dismiss notification",onClick:this.handleDismissClick},e("kritzel-icon",{name:"x",size:16})))),e("p",{class:"message"},t.message)))}};Ge.style=":host{display:block}.card{box-sizing:border-box;width:100%;max-width:var(--kritzel-notification-card-max-width, 360px);margin-inline:auto;font-family:var(--kritzel-font-family, sans-serif);padding:var(--kritzel-notification-card-padding, 12px 14px);border:var(--kritzel-notification-card-border, 1px solid #e5e7eb);border-radius:var(--kritzel-notification-card-border-radius, 12px);background-color:var(--kritzel-notification-card-background-color, #ffffff);color:var(--kritzel-notification-card-color, #111827);box-shadow:var(--kritzel-notification-card-box-shadow, 0 8px 20px rgba(15, 23, 42, 0.08))}.card-header{display:flex;align-items:center;justify-content:space-between;gap:var(--kritzel-notification-card-header-gap, 8px);margin-bottom:var(--kritzel-notification-card-header-margin-bottom, 8px)}.header-right{display:inline-flex;align-items:center;gap:var(--kritzel-notification-card-header-right-gap, 6px)}.type-pill{display:inline-flex;align-items:center;justify-content:center;min-height:var(--kritzel-notification-card-pill-height, 22px);padding:var(--kritzel-notification-card-pill-padding, 0 8px);border-radius:var(--kritzel-notification-card-pill-border-radius, 999px);background-color:var(--kritzel-notification-card-pill-background-color, #eff6ff);color:var(--kritzel-notification-card-pill-color, #1d4ed8);font-size:var(--kritzel-notification-card-pill-font-size, 12px);font-weight:var(--kritzel-notification-card-pill-font-weight, 600);line-height:1}.card.type-info .type-pill{background-color:var(--kritzel-notification-card-info-pill-background-color, #eff6ff);color:var(--kritzel-notification-card-info-pill-color, #1d4ed8)}.card.type-warning .type-pill{background-color:var(--kritzel-notification-card-warning-pill-background-color, #fff7ed);color:var(--kritzel-notification-card-warning-pill-color, #b45309)}.card.type-error .type-pill{background-color:var(--kritzel-notification-card-error-pill-background-color, #fef2f2);color:var(--kritzel-notification-card-error-pill-color, #b91c1c)}.timestamp{color:var(--kritzel-notification-card-timestamp-color, #6b7280);font-size:var(--kritzel-notification-card-timestamp-font-size, 12px);white-space:nowrap}.dismiss-button{display:inline-flex;align-items:center;justify-content:center;width:var(--kritzel-notification-card-dismiss-button-size, 24px);height:var(--kritzel-notification-card-dismiss-button-size, 24px);padding:0;border:none;border-radius:var(--kritzel-notification-card-dismiss-button-border-radius, 6px);background:var(--kritzel-notification-card-dismiss-button-background-color, transparent);color:var(--kritzel-notification-card-dismiss-button-color, #4b5563);cursor:var(--kritzel-global-pointer-cursor, pointer);-webkit-tap-highlight-color:transparent}.dismiss-button:hover{background:var(--kritzel-notification-card-dismiss-button-hover-background-color, #f3f4f6)}.dismiss-button:active{background:var(--kritzel-notification-card-dismiss-button-active-background-color, #e5e7eb)}.dismiss-button:focus-visible{outline:revert}.message{margin:0;color:var(--kritzel-notification-card-message-color, inherit);font-size:var(--kritzel-notification-card-message-font-size, 14px);line-height:var(--kritzel-notification-card-message-line-height, 1.45);word-break:break-word}";const qe=class{constructor(e){t(this,e),this.valueChange=n(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:"8901e0b56ccbc344420483a4a56663f7cd74d9e8"},e("div",{key:"5f3d6b5c56007e11383aa69f60f22031b0e8f332",class:"input-container"},this.label&&e("label",{key:"2cb102a5b6c16d068f4f304fbcc6241f79fc0ce8",class:"input-label"},this.label),e("div",{key:"96441095acc3d9a8e77b6d2bac2ceda683c9c976",class:"input-wrapper"},e("input",{key:"523a5485111077e20faded235df6362e5ea9cfd4",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:"2071e98125a8d014513e93052bd8c1fee17932a5",class:"spinner-buttons"},e("button",{key:"12422e5285dfb532dbbb6eb1a36dbcb3de50f2bc",type:"button",class:"spinner-button spinner-up",onClick:this.handleIncrement,tabIndex:-1,"aria-label":"Increase value"},e("svg",{key:"49ad5625c80fae6706ba4ab91f47bd550481ef74",viewBox:"0 0 10 6",class:"spinner-icon"},e("path",{key:"ff7d19b61baeb5ba58bb60f2cc629bcec6eb4411",d:"M1 5L5 1L9 5",stroke:"currentColor","stroke-width":"1.5",fill:"none","stroke-linecap":"round","stroke-linejoin":"round"}))),e("button",{key:"e4fec28e4fc997e007127f2b30b00cc752433221",type:"button",class:"spinner-button spinner-down",onClick:this.handleDecrement,tabIndex:-1,"aria-label":"Decrease value"},e("svg",{key:"27bf06cde8de11f4a97090911afd6b8993463112",viewBox:"0 0 10 6",class:"spinner-icon"},e("path",{key:"ed7071dd79bfe509ebb319ce43ecb3e982dd4157",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}]}}};qe.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:var(--kritzel-numeric-input-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 var(--kritzel-numeric-input-spinner-border-radius, 5px) var(--kritzel-numeric-input-spinner-border-radius, 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 Ye=class{constructor(e){t(this,e),this.valueChange=n(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:"2dadd8a7c4d1af748e91a6005433288ab231f2e8"},e("div",{key:"65ae90d95bffff244d97329754cf0cb8f73331fa",class:"opacity-container"},e("div",{key:"90e95347f7015882112f0653a25347e715233227",class:"slider-wrapper"},e("input",{key:"15836bc089c1725062016677d3b95384d1958431",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}%`,"--kritzel-opacity-slider-thumb-border-color":this.previewColor}}))))}};Ye.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 Ze=class{constructor(e){t(this,e),this.valueChange=n(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 n=e;switch(t.key){case"ArrowLeft":t.preventDefault(),n=e>0?e-1:i.length-1;break;case"ArrowRight":t.preventDefault(),n=e<i.length-1?e+1:0;break;case"Home":t.preventDefault(),n=0;break;case"End":t.preventDefault(),n=i.length-1;break;default:return}this.handleTabClick(i[n].id);const r=t.currentTarget.parentElement,o=r?.querySelectorAll("button");o?.[n]?.focus()}render(){return e(i,{key:"f02f93ada5ec002695b62f511c847de201a8cbe4"},e("div",{key:"bb08ae773f1b993cb330556a5778d71fc5e91ce1",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))))))}};Ze.style=":host{display:block;max-width:100%}.pill-tabs-container{display:inline-flex;align-items:center;gap:4px;padding:4px;max-width:100%;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;min-width:0;max-width:100%;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{display:block;min-width:0;max-width:var(--kritzel-pill-tabs-tab-label-max-width, 10rem);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1}.pill-tab kritzel-icon{flex-shrink:0}";const Xe=class{constructor(e){t(this,e),this.close=n(this,"close")}get host(){return r(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)),n=this.anchor&&e.some((t=>t===this.anchor));i||n||(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(!d.isElementInViewport(this.anchor))return this.anchor?.blur(),void this.closePortal();this.calculatePosition()}portal;id=`portal-${I.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=d.getFocusableElements(this.host);if(0===e.length)return;const i=e[0],n=e[e.length-1],r=this.getDeepActiveElement();t.shiftKey?r===i&&(n.focus(),t.preventDefault()):r===n&&(i.focus(),t.preventDefault())}get firstFocusableElement(){const t=this.host.shadowRoot?.querySelector("slot"),e=t?.assignedElements({flatten:!0})[0];return e?d.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 n;n=t.left+t.width/2>window.innerWidth/2?t.right-e.width-i:t.left+i;const r=window.innerWidth-e.width-this.minLeft;return n<this.minLeft&&(n=this.minLeft),n>r&&(n=r),Math.round(n+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 n=t.bottom+i;const r=window.innerHeight-t.bottom-i-8,o=t.top-i-8;return this.host.style.removeProperty("--kritzel-portal-max-height"),e.height<=r?n=t.bottom+i:e.height<=o?n=t.top-e.height-i:r>=o?(n=t.bottom+i,this.host.style.setProperty("--kritzel-portal-max-height",`${r}px`)):(n=8,this.host.style.setProperty("--kritzel-portal-max-height",`${o}px`)),Math.round(n+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 n=t.getRootNode();if(!(n instanceof ShadowRoot))return null;t=n.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:"72273b4c7811473072ee27668836a5ddddcfd618",style:{display:this.anchor?"block":"none"}},e("slot",{key:"b4f37ca27c47ab950a4639162fa31a3c2362d6f7"}))}static get watchers(){return{anchor:[{anchorChanged:0}]}}},Je=-1/0,Qe=1/0,ti=-1/0,ei=1/0,ii={showViewportInfo:!1,showObjectInfo:!1,showSyncProviderInfo:!0,showMigrationInfo:!0,showAssetResolverInfo:!1},ni=["general","viewport","shortcuts","developer","about"],ri=class{constructor(e){t(this,e),this.settingsChange=n(this,"settingsChange")}get host(){return r(this)}availableThemes=["light","dark"];availableLocales=[];shortcuts=[];terms={};settings;onSettingsPropChange(t){t&&this.applySettings(t)}isDialogOpen=!1;selectedCategoryId=ni[0];scaleMin=1e-4;scaleMax=1e3;lockDrawingScale=!0;theme="light";locale="en";viewportBoundaryLeft=Je;viewportBoundaryRight=Qe;viewportBoundaryTop=ti;viewportBoundaryBottom=ei;debugInfo={...ii};settingsChange;componentWillLoad(){this.settings&&this.applySettings(this.settings)}applySettings(t){"number"==typeof t.scaleMin&&(this.scaleMin=t.scaleMin),"number"==typeof t.scaleMax&&(this.scaleMax=t.scaleMax),"boolean"==typeof t.lockDrawingScale&&(this.lockDrawingScale=t.lockDrawingScale),"string"==typeof t.theme&&(this.theme=t.theme),"string"==typeof t.locale&&(this.locale=t.locale),"number"==typeof t.viewportBoundaryLeft&&(this.viewportBoundaryLeft=t.viewportBoundaryLeft),"number"==typeof t.viewportBoundaryRight&&(this.viewportBoundaryRight=t.viewportBoundaryRight),"number"==typeof t.viewportBoundaryTop&&(this.viewportBoundaryTop=t.viewportBoundaryTop),"number"==typeof t.viewportBoundaryBottom&&(this.viewportBoundaryBottom=t.viewportBoundaryBottom),t.debugInfo&&(this.debugInfo={...ii,...t.debugInfo})}emitSettings(){this.settingsChange.emit({scaleMin:this.scaleMin,scaleMax:this.scaleMax,lockDrawingScale:this.lockDrawingScale,theme:this.theme,locale:this.locale,viewportBoundaryLeft:this.viewportBoundaryLeft,viewportBoundaryRight:this.viewportBoundaryRight,viewportBoundaryTop:this.viewportBoundaryTop,viewportBoundaryBottom:this.viewportBoundaryBottom,debugInfo:this.debugInfo})}handleScaleMinChange=t=>{this.scaleMin=t.detail,this.emitSettings()};handleScaleMaxChange=t=>{this.scaleMax=t.detail,this.emitSettings()};handleLockDrawingScaleChange=t=>{this.lockDrawingScale=t.detail,this.emitSettings()};handleThemeChange=t=>{this.theme=t.detail,this.emitSettings()};handleLocaleChange=t=>{this.locale=t.detail,this.emitSettings()};handleViewportBoundaryLeftChange=t=>{this.viewportBoundaryLeft=t.detail??Je,this.emitSettings()};handleViewportBoundaryRightChange=t=>{this.viewportBoundaryRight=t.detail??Qe,this.emitSettings()};handleViewportBoundaryTopChange=t=>{this.viewportBoundaryTop=t.detail??ti,this.emitSettings()};handleViewportBoundaryBottomChange=t=>{this.viewportBoundaryBottom=t.detail??ei,this.emitSettings()};handleDebugInfoChange=t=>e=>{this.debugInfo={...this.debugInfo,[t]:e.detail},this.emitSettings()};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}t(t,e){return this.terms[t]??e}get categories(){const t={general:"settings",viewport:"viewport",shortcuts:"command",developer:"braces",about:"info"},e={general:{key:"settings.categories.general",fallback:"General"},viewport:{key:"settings.categories.viewport",fallback:"Viewport"},shortcuts:{key:"settings.categories.shortcuts",fallback:"Keyboard Shortcuts"},developer:{key:"settings.categories.developer",fallback:"Developer Options"},about:{key:"settings.categories.about",fallback:"About"}};return ni.map((i=>({id:i,label:this.t(e[i].key,e[i].fallback),icon:t[i]})))}renderCategoryContent(){switch(this.selectedCategoryId){case"general":return e("div",{class:"settings-content"},e("h3",null,this.t("settings.general.title","General Settings")),e("div",{class:"settings-group"},e("div",{class:"settings-item"},e("label",{class:"settings-label"},this.t("settings.general.theme.label","Theme")),e("p",{class:"settings-description"},this.t("settings.general.theme.description","Select a registered color theme for the editor interface.")),e("kritzel-dropdown",{options:this.availableThemes.map((t=>({value:t,label:t}))),value:this.theme,onValueChanged:this.handleThemeChange})),this.availableLocales.length>0&&e("div",{class:"settings-item"},e("label",{class:"settings-label"},this.t("settings.general.language.label","Language")),e("p",{class:"settings-description"},this.t("settings.general.language.description","Select the display language for the editor interface.")),e("kritzel-dropdown",{options:this.availableLocales.map((t=>({value:t.code,label:t.label}))),value:this.locale,onValueChanged:this.handleLocaleChange})),e("div",{class:"settings-item"},e("label",{class:"settings-label"},this.t("settings.general.lockDrawingScale.label","Lock Drawing Scale")),e("p",{class:"settings-description"},this.t("settings.general.lockDrawingScale.description","When enabled, drawn objects maintain a fixed visual size regardless of the current zoom level.")),e("kritzel-slide-toggle",{checked:this.lockDrawingScale,label:this.t("settings.general.lockDrawingScale.label","Lock Drawing Scale"),onCheckedChange:this.handleLockDrawingScaleChange}))));case"viewport":return e("div",{class:"settings-content"},e("h3",null,this.t("settings.viewport.title","Viewport Settings")),e("div",{class:"settings-group"},e("div",{class:"settings-item"},e("label",{class:"settings-label"},this.t("settings.viewport.minZoom.label","Minimum Zoom Level")),e("p",{class:"settings-description"},this.t("settings.viewport.minZoom.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"},this.t("settings.viewport.maxZoom.label","Maximum Zoom Level")),e("p",{class:"settings-description"},this.t("settings.viewport.maxZoom.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"},this.t("settings.viewport.boundaryLeft.label","Viewport Boundary Left")),e("p",{class:"settings-description"},this.t("settings.viewport.boundaryLeft.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:this.t("settings.viewport.boundaryPlaceholder","Infinite"),onValueChange:this.handleViewportBoundaryLeftChange})),e("div",{class:"settings-item"},e("label",{class:"settings-label"},this.t("settings.viewport.boundaryRight.label","Viewport Boundary Right")),e("p",{class:"settings-description"},this.t("settings.viewport.boundaryRight.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:this.t("settings.viewport.boundaryPlaceholder","Infinite"),onValueChange:this.handleViewportBoundaryRightChange})),e("div",{class:"settings-item"},e("label",{class:"settings-label"},this.t("settings.viewport.boundaryTop.label","Viewport Boundary Top")),e("p",{class:"settings-description"},this.t("settings.viewport.boundaryTop.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:this.t("settings.viewport.boundaryPlaceholder","Infinite"),onValueChange:this.handleViewportBoundaryTopChange})),e("div",{class:"settings-item"},e("label",{class:"settings-label"},this.t("settings.viewport.boundaryBottom.label","Viewport Boundary Bottom")),e("p",{class:"settings-description"},this.t("settings.viewport.boundaryBottom.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:this.t("settings.viewport.boundaryPlaceholder","Infinite"),onValueChange:this.handleViewportBoundaryBottomChange}))));case"shortcuts":return e("div",{class:"settings-content"},e("h3",null,this.t("settings.shortcuts.title","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,this.t("settings.developer.title","Developer Options")),e("div",{class:"settings-group"},e("div",{class:"settings-item"},e("label",{class:"settings-label"},this.t("settings.developer.showViewportInfo.label","Show Viewport Info")),e("p",{class:"settings-description"},this.t("settings.developer.showViewportInfo.description","Display viewport debug information such as position, zoom level, and boundaries.")),e("kritzel-slide-toggle",{checked:this.debugInfo.showViewportInfo,label:this.t("settings.developer.showViewportInfo.label","Show Viewport Info"),onCheckedChange:this.handleDebugInfoChange("showViewportInfo")})),e("div",{class:"settings-item"},e("label",{class:"settings-label"},this.t("settings.developer.showObjectInfo.label","Show Object Info")),e("p",{class:"settings-description"},this.t("settings.developer.showObjectInfo.description","Display debug information about objects on the canvas.")),e("kritzel-slide-toggle",{checked:this.debugInfo.showObjectInfo,label:this.t("settings.developer.showObjectInfo.label","Show Object Info"),onCheckedChange:this.handleDebugInfoChange("showObjectInfo")})),e("div",{class:"settings-item"},e("label",{class:"settings-label"},this.t("settings.developer.showSyncProviderInfo.label","Show Sync Provider Info")),e("p",{class:"settings-description"},this.t("settings.developer.showSyncProviderInfo.description","Display debug information about the sync provider connection status.")),e("kritzel-slide-toggle",{checked:this.debugInfo.showSyncProviderInfo,label:this.t("settings.developer.showSyncProviderInfo.label","Show Sync Provider Info"),onCheckedChange:this.handleDebugInfoChange("showSyncProviderInfo")})),e("div",{class:"settings-item"},e("label",{class:"settings-label"},this.t("settings.developer.showMigrationInfo.label","Show Migration Info")),e("p",{class:"settings-description"},this.t("settings.developer.showMigrationInfo.description","Display debug information about data migrations.")),e("kritzel-slide-toggle",{checked:this.debugInfo.showMigrationInfo,label:this.t("settings.developer.showMigrationInfo.label","Show Migration Info"),onCheckedChange:this.handleDebugInfoChange("showMigrationInfo")}))));case"about":return e("div",{class:"settings-content"},e("h3",null,this.t("settings.about.title","About")),e("p",null,this.t("settings.about.description","Kritzel - A drawing application")),e("p",{class:"version-info"},"Version ","0.3.40"),e("p",{class:"version-info"},"App-State Schema v",U),e("p",{class:"version-info"},"Workspace Schema v",V));default:return null}}render(){return e(i,{key:"7e65885051a30635291bb98fb87addf0bdbca8e8"},e("kritzel-dialog",{key:"c795bad227882904d8dda96768e8ccdd7c48df71",isOpen:this.isDialogOpen,dialogTitle:this.t("settings.dialogTitle","Settings"),size:"large",contained:!0,onDialogClose:this.closeDialog},e("kritzel-master-detail",{key:"eff1486d14d4b55441b9a52b293da7459771331d",items:this.categories,selectedItemId:this.selectedCategoryId,onItemSelect:this.handleCategorySelect},this.renderCategoryContent())))}static get watchers(){return{settings:[{onSettingsPropChange:0}]}}};ri.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 oi=class{constructor(e){t(this,e),this.valueChange=n(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:"6d38a9af2e4c4c7f86ab994c63fc074007c86b48"},e("div",{key:"cf58f26cb0e56e274873d11024209c6908d317bb",class:"fill-row"},e("button",{key:"c75eed70fe0c2fcbf0fd136bb6fce75b2dbfb45d",class:{"fill-option":!0,selected:"transparent"===this.value},onClick:()=>this.handleFillChange("transparent"),title:"Transparent background"},this.renderFillIcon("transparent")),e("button",{key:"5d6ede439b5d5e55598cd8c20b5851fb9f210463",class:{"fill-option":!0,selected:"filled"===this.value},onClick:()=>this.handleFillChange("filled"),title:"Filled background"},this.renderFillIcon("filled"))))}};oi.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%}";var si,ai,li={};function ci(){return ai?si:(ai=1,si=function(){return"function"==typeof Promise&&Promise.prototype&&Promise.prototype.then})}var hi,ui={},di={};function fi(){if(hi)return di;let t;hi=1;const e=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];return di.getSymbolSize=function(t){if(!t)throw new Error('"version" cannot be null or undefined');if(t<1||t>40)throw new Error('"version" should be in range from 1 to 40');return 4*t+17},di.getSymbolTotalCodewords=function(t){return e[t]},di.getBCHDigit=function(t){let e=0;for(;0!==t;)e++,t>>>=1;return e},di.setToSJISFunction=function(e){if("function"!=typeof e)throw new Error('"toSJISFunc" is not a valid function.');t=e},di.isKanjiModeEnabled=function(){return void 0!==t},di.toSJIS=function(e){return t(e)},di}var pi,gi,bi,vi,mi,ki={};function yi(){return pi||(pi=1,function(t){t.L={bit:1},t.M={bit:0},t.Q={bit:3},t.H={bit:2},t.isValid=function(t){return t&&void 0!==t.bit&&t.bit>=0&&t.bit<4},t.from=function(e,i){if(t.isValid(e))return e;try{return function(e){if("string"!=typeof e)throw new Error("Param is not a string");switch(e.toLowerCase()){case"l":case"low":return t.L;case"m":case"medium":return t.M;case"q":case"quartile":return t.Q;case"h":case"high":return t.H;default:throw new Error("Unknown EC Level: "+e)}}(e)}catch(t){return i}}}(ki)),ki}var wi,xi,zi,Ci,Si={},Ii={},Mi={},$i={};function Ti(){if(Ci)return $i;Ci=1;const t=yi(),e=[1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,4,1,2,4,4,2,4,4,4,2,4,6,5,2,4,6,6,2,5,8,8,4,5,8,8,4,5,8,11,4,8,10,11,4,9,12,16,4,9,16,16,6,10,12,18,6,10,17,16,6,11,16,19,6,13,18,21,7,14,21,25,8,16,20,25,8,17,23,25,9,17,23,34,9,18,25,30,10,20,27,32,12,21,29,35,12,23,34,37,12,25,34,40,13,26,35,42,14,28,38,45,15,29,40,48,16,31,43,51,17,33,45,54,18,35,48,57,19,37,51,60,19,38,53,63,20,40,56,66,21,43,59,70,22,45,62,74,24,47,65,77,25,49,68,81],i=[7,10,13,17,10,16,22,28,15,26,36,44,20,36,52,64,26,48,72,88,36,64,96,112,40,72,108,130,48,88,132,156,60,110,160,192,72,130,192,224,80,150,224,264,96,176,260,308,104,198,288,352,120,216,320,384,132,240,360,432,144,280,408,480,168,308,448,532,180,338,504,588,196,364,546,650,224,416,600,700,224,442,644,750,252,476,690,816,270,504,750,900,300,560,810,960,312,588,870,1050,336,644,952,1110,360,700,1020,1200,390,728,1050,1260,420,784,1140,1350,450,812,1200,1440,480,868,1290,1530,510,924,1350,1620,540,980,1440,1710,570,1036,1530,1800,570,1064,1590,1890,600,1120,1680,1980,630,1204,1770,2100,660,1260,1860,2220,720,1316,1950,2310,750,1372,2040,2430];return $i.getBlocksCount=function(i,n){switch(n){case t.L:return e[4*(i-1)+0];case t.M:return e[4*(i-1)+1];case t.Q:return e[4*(i-1)+2];case t.H:return e[4*(i-1)+3];default:return}},$i.getTotalCodewordsCount=function(e,n){switch(n){case t.L:return i[4*(e-1)+0];case t.M:return i[4*(e-1)+1];case t.Q:return i[4*(e-1)+2];case t.H:return i[4*(e-1)+3];default:return}},$i}var ji,Ai,Ei,_i,Oi={},Di={};var Fi,Ri={},Li={},Pi={};function Bi(){return Fi||(Fi=1,Pi.isValid=function(t){return!isNaN(t)&&t>=1&&t<=40}),Pi}var Wi,Vi,Ni,Ki={};function Ui(){if(Wi)return Ki;Wi=1;const t="[0-9]+";let e="(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+";e=e.replace(/u/g,"\\u");const i="(?:(?![A-Z0-9 $%*+\\-./:]|"+e+")(?:.|[\r\n]))+";Ki.KANJI=new RegExp(e,"g"),Ki.BYTE_KANJI=new RegExp("[^A-Z0-9 $%*+\\-./:]+","g"),Ki.BYTE=new RegExp(i,"g"),Ki.NUMERIC=new RegExp(t,"g"),Ki.ALPHANUMERIC=new RegExp("[A-Z $%*+\\-./:]+","g");const n=new RegExp("^"+e+"$"),r=new RegExp("^"+t+"$"),o=new RegExp("^[A-Z0-9 $%*+\\-./:]+$");return Ki.testKanji=function(t){return n.test(t)},Ki.testNumeric=function(t){return r.test(t)},Ki.testAlphanumeric=function(t){return o.test(t)},Ki}function Hi(){return Vi||(Vi=1,function(t){const e=Bi(),i=Ui();t.NUMERIC={id:"Numeric",bit:1,ccBits:[10,12,14]},t.ALPHANUMERIC={id:"Alphanumeric",bit:2,ccBits:[9,11,13]},t.BYTE={id:"Byte",bit:4,ccBits:[8,16,16]},t.KANJI={id:"Kanji",bit:8,ccBits:[8,10,12]},t.MIXED={bit:-1},t.getCharCountIndicator=function(t,i){if(!t.ccBits)throw new Error("Invalid mode: "+t);if(!e.isValid(i))throw new Error("Invalid version: "+i);return i>=1&&i<10?t.ccBits[0]:i<27?t.ccBits[1]:t.ccBits[2]},t.getBestModeForData=function(e){return i.testNumeric(e)?t.NUMERIC:i.testAlphanumeric(e)?t.ALPHANUMERIC:i.testKanji(e)?t.KANJI:t.BYTE},t.toString=function(t){if(t&&t.id)return t.id;throw new Error("Invalid mode")},t.isValid=function(t){return t&&t.bit&&t.ccBits},t.from=function(e,i){if(t.isValid(e))return e;try{return function(e){if("string"!=typeof e)throw new Error("Param is not a string");switch(e.toLowerCase()){case"numeric":return t.NUMERIC;case"alphanumeric":return t.ALPHANUMERIC;case"kanji":return t.KANJI;case"byte":return t.BYTE;default:throw new Error("Unknown mode: "+e)}}(e)}catch(t){return i}}}(Li)),Li}var Gi,qi,Yi,Zi,Xi,Ji,Qi,tn,en,nn,rn,on,sn={},an={},ln={exports:{}};function cn(){return nn||(nn=1,function(t){var e={single_source_shortest_paths:function(t,i,n){var r={},o={};o[i]=0;var s,a,l,c,h,u,d=e.PriorityQueue.make();for(d.push(i,0);!d.empty();)for(l in c=(s=d.pop()).cost,h=t[a=s.value]||{})h.hasOwnProperty(l)&&(u=c+h[l],(void 0===o[l]||o[l]>u)&&(o[l]=u,d.push(l,u),r[l]=a));if(void 0!==n&&void 0===o[n]){var f=["Could not find a path from ",i," to ",n,"."].join("");throw new Error(f)}return r},extract_shortest_path_from_predecessor_list:function(t,e){for(var i=[],n=e;n;)i.push(n),n=t[n];return i.reverse(),i},find_path:function(t,i,n){var r=e.single_source_shortest_paths(t,i,n);return e.extract_shortest_path_from_predecessor_list(r,n)},PriorityQueue:{make:function(t){var i,n=e.PriorityQueue,r={};for(i in t=t||{},n)n.hasOwnProperty(i)&&(r[i]=n[i]);return r.queue=[],r.sorter=t.sorter||n.default_sorter,r},default_sorter:function(t,e){return t.cost-e.cost},push:function(t,e){this.queue.push({value:t,cost:e}),this.queue.sort(this.sorter)},pop:function(){return this.queue.shift()},empty:function(){return 0===this.queue.length}}};t.exports=e}(ln)),ln.exports}function hn(){if(on)return ui;on=1;const t=fi(),e=yi(),i=function(){if(bi)return gi;function t(){this.buffer=[],this.length=0}return bi=1,t.prototype={get:function(t){const e=Math.floor(t/8);return 1==(this.buffer[e]>>>7-t%8&1)},put:function(t,e){for(let i=0;i<e;i++)this.putBit(1==(t>>>e-i-1&1))},getLengthInBits:function(){return this.length},putBit:function(t){const e=Math.floor(this.length/8);this.buffer.length<=e&&this.buffer.push(0),t&&(this.buffer[e]|=128>>>this.length%8),this.length++}},gi=t}(),n=function(){if(mi)return vi;function t(t){if(!t||t<1)throw new Error("BitMatrix size must be defined and greater than 0");this.size=t,this.data=new Uint8Array(t*t),this.reservedBit=new Uint8Array(t*t)}return mi=1,t.prototype.set=function(t,e,i,n){const r=t*this.size+e;this.data[r]=i,n&&(this.reservedBit[r]=!0)},t.prototype.get=function(t,e){return this.data[t*this.size+e]},t.prototype.xor=function(t,e,i){this.data[t*this.size+e]^=i},t.prototype.isReserved=function(t,e){return this.reservedBit[t*this.size+e]},vi=t}(),r=(wi||(wi=1,function(t){const e=fi().getSymbolSize;t.getRowColCoords=function(t){if(1===t)return[];const i=Math.floor(t/7)+2,n=e(t),r=145===n?26:2*Math.ceil((n-13)/(2*i-2)),o=[n-7];for(let t=1;t<i-1;t++)o[t]=o[t-1]-r;return o.push(6),o.reverse()},t.getPositions=function(e){const i=[],n=t.getRowColCoords(e),r=n.length;for(let t=0;t<r;t++)for(let e=0;e<r;e++)0===t&&0===e||0===t&&e===r-1||t===r-1&&0===e||i.push([n[t],n[e]]);return i}}(Si)),Si),o=function(){if(xi)return Ii;xi=1;const t=fi().getSymbolSize;return Ii.getPositions=function(e){const i=t(e);return[[0,0],[i-7,0],[0,i-7]]},Ii}(),s=(zi||(zi=1,function(t){t.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};function e(e,i,n){switch(e){case t.Patterns.PATTERN000:return(i+n)%2==0;case t.Patterns.PATTERN001:return i%2==0;case t.Patterns.PATTERN010:return n%3==0;case t.Patterns.PATTERN011:return(i+n)%3==0;case t.Patterns.PATTERN100:return(Math.floor(i/2)+Math.floor(n/3))%2==0;case t.Patterns.PATTERN101:return i*n%2+i*n%3==0;case t.Patterns.PATTERN110:return(i*n%2+i*n%3)%2==0;case t.Patterns.PATTERN111:return(i*n%3+(i+n)%2)%2==0;default:throw new Error("bad maskPattern:"+e)}}t.isValid=function(t){return null!=t&&""!==t&&!isNaN(t)&&t>=0&&t<=7},t.from=function(e){return t.isValid(e)?parseInt(e,10):void 0},t.getPenaltyN1=function(t){const e=t.size;let i=0,n=0,r=0,o=null,s=null;for(let a=0;a<e;a++){n=r=0,o=s=null;for(let l=0;l<e;l++){let e=t.get(a,l);e===o?n++:(n>=5&&(i+=n-5+3),o=e,n=1),e=t.get(l,a),e===s?r++:(r>=5&&(i+=r-5+3),s=e,r=1)}n>=5&&(i+=n-5+3),r>=5&&(i+=r-5+3)}return i},t.getPenaltyN2=function(t){const e=t.size;let i=0;for(let n=0;n<e-1;n++)for(let r=0;r<e-1;r++){const e=t.get(n,r)+t.get(n,r+1)+t.get(n+1,r)+t.get(n+1,r+1);4!==e&&0!==e||i++}return 3*i},t.getPenaltyN3=function(t){const e=t.size;let i=0,n=0,r=0;for(let o=0;o<e;o++){n=r=0;for(let s=0;s<e;s++)n=n<<1&2047|t.get(o,s),s>=10&&(1488===n||93===n)&&i++,r=r<<1&2047|t.get(s,o),s>=10&&(1488===r||93===r)&&i++}return 40*i},t.getPenaltyN4=function(t){let e=0;const i=t.data.length;for(let n=0;n<i;n++)e+=t.data[n];return 10*Math.abs(Math.ceil(100*e/i/5)-10)},t.applyMask=function(t,i){const n=i.size;for(let r=0;r<n;r++)for(let o=0;o<n;o++)i.isReserved(o,r)||i.xor(o,r,e(t,o,r))},t.getBestMask=function(e,i){const n=Object.keys(t.Patterns).length;let r=0,o=1/0;for(let s=0;s<n;s++){i(s),t.applyMask(s,e);const n=t.getPenaltyN1(e)+t.getPenaltyN2(e)+t.getPenaltyN3(e)+t.getPenaltyN4(e);t.applyMask(s,e),n<o&&(o=n,r=s)}return r}}(Mi)),Mi),a=Ti(),l=function(){if(_i)return Ei;_i=1;const t=(Ai||(Ai=1,function(t){const e=function(){if(ji)return Di;ji=1;const t=new Uint8Array(512),e=new Uint8Array(256);return function(){let i=1;for(let n=0;n<255;n++)t[n]=i,e[i]=n,i<<=1,256&i&&(i^=285);for(let e=255;e<512;e++)t[e]=t[e-255]}(),Di.log=function(t){if(t<1)throw new Error("log("+t+")");return e[t]},Di.exp=function(e){return t[e]},Di.mul=function(i,n){return 0===i||0===n?0:t[e[i]+e[n]]},Di}();t.mul=function(t,i){const n=new Uint8Array(t.length+i.length-1);for(let r=0;r<t.length;r++)for(let o=0;o<i.length;o++)n[r+o]^=e.mul(t[r],i[o]);return n},t.mod=function(t,i){let n=new Uint8Array(t);for(;n.length-i.length>=0;){const t=n[0];for(let r=0;r<i.length;r++)n[r]^=e.mul(i[r],t);let r=0;for(;r<n.length&&0===n[r];)r++;n=n.slice(r)}return n},t.generateECPolynomial=function(i){let n=new Uint8Array([1]);for(let r=0;r<i;r++)n=t.mul(n,new Uint8Array([1,e.exp(r)]));return n}}(Oi)),Oi);function e(t){this.genPoly=void 0,this.degree=t,this.degree&&this.initialize(this.degree)}return e.prototype.initialize=function(e){this.degree=e,this.genPoly=t.generateECPolynomial(this.degree)},e.prototype.encode=function(e){if(!this.genPoly)throw new Error("Encoder not initialized");const i=new Uint8Array(e.length+this.degree);i.set(e);const n=t.mod(i,this.genPoly),r=this.degree-n.length;if(r>0){const t=new Uint8Array(this.degree);return t.set(n,r),t}return n},Ei=e}(),c=(Ni||(Ni=1,function(t){const e=fi(),i=Ti(),n=yi(),r=Hi(),o=Bi(),s=e.getBCHDigit(7973);function a(t,e){return r.getCharCountIndicator(t,e)+4}function l(t,e){let i=0;return t.forEach((function(t){const n=a(t.mode,e);i+=n+t.getBitsLength()})),i}t.from=function(t,e){return o.isValid(t)?parseInt(t,10):e},t.getCapacity=function(t,n,s){if(!o.isValid(t))throw new Error("Invalid QR Code version");void 0===s&&(s=r.BYTE);const l=8*(e.getSymbolTotalCodewords(t)-i.getTotalCodewordsCount(t,n));if(s===r.MIXED)return l;const c=l-a(s,t);switch(s){case r.NUMERIC:return Math.floor(c/10*3);case r.ALPHANUMERIC:return Math.floor(c/11*2);case r.KANJI:return Math.floor(c/13);default:return Math.floor(c/8)}},t.getBestVersionForData=function(e,i){let o;const s=n.from(i,n.M);if(Array.isArray(e)){if(e.length>1)return function(e,i){for(let n=1;n<=40;n++)if(l(e,n)<=t.getCapacity(n,i,r.MIXED))return n}(e,s);if(0===e.length)return 1;o=e[0]}else o=e;return function(e,i,n){for(let r=1;r<=40;r++)if(i<=t.getCapacity(r,n,e))return r}(o.mode,o.getLength(),s)},t.getEncodedBits=function(t){if(!o.isValid(t)||t<7)throw new Error("Invalid QR Code version");let i=t<<12;for(;e.getBCHDigit(i)-s>=0;)i^=7973<<e.getBCHDigit(i)-s;return t<<12|i}}(Ri)),Ri),h=function(){if(Gi)return sn;Gi=1;const t=fi(),e=t.getBCHDigit(1335);return sn.getEncodedBits=function(i,n){const r=i.bit<<3|n;let o=r<<10;for(;t.getBCHDigit(o)-e>=0;)o^=1335<<t.getBCHDigit(o)-e;return 21522^(r<<10|o)},sn}(),u=Hi(),d=(rn||(rn=1,function(t){const e=Hi(),i=function(){if(Yi)return qi;Yi=1;const t=Hi();function e(e){this.mode=t.NUMERIC,this.data=e.toString()}return e.getBitsLength=function(t){return 10*Math.floor(t/3)+(t%3?t%3*3+1:0)},e.prototype.getLength=function(){return this.data.length},e.prototype.getBitsLength=function(){return e.getBitsLength(this.data.length)},e.prototype.write=function(t){let e,i,n;for(e=0;e+3<=this.data.length;e+=3)i=this.data.substr(e,3),n=parseInt(i,10),t.put(n,10);const r=this.data.length-e;r>0&&(i=this.data.substr(e),n=parseInt(i,10),t.put(n,3*r+1))},qi=e}(),n=function(){if(Xi)return Zi;Xi=1;const t=Hi(),e=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"," ","$","%","*","+","-",".","/",":"];function i(e){this.mode=t.ALPHANUMERIC,this.data=e}return i.getBitsLength=function(t){return 11*Math.floor(t/2)+t%2*6},i.prototype.getLength=function(){return this.data.length},i.prototype.getBitsLength=function(){return i.getBitsLength(this.data.length)},i.prototype.write=function(t){let i;for(i=0;i+2<=this.data.length;i+=2){let n=45*e.indexOf(this.data[i]);n+=e.indexOf(this.data[i+1]),t.put(n,11)}this.data.length%2&&t.put(e.indexOf(this.data[i]),6)},Zi=i}(),r=function(){if(Qi)return Ji;Qi=1;const t=Hi();function e(e){this.mode=t.BYTE,this.data="string"==typeof e?(new TextEncoder).encode(e):new Uint8Array(e)}return e.getBitsLength=function(t){return 8*t},e.prototype.getLength=function(){return this.data.length},e.prototype.getBitsLength=function(){return e.getBitsLength(this.data.length)},e.prototype.write=function(t){for(let e=0,i=this.data.length;e<i;e++)t.put(this.data[e],8)},Ji=e}(),o=function(){if(en)return tn;en=1;const t=Hi(),e=fi();function i(e){this.mode=t.KANJI,this.data=e}return i.getBitsLength=function(t){return 13*t},i.prototype.getLength=function(){return this.data.length},i.prototype.getBitsLength=function(){return i.getBitsLength(this.data.length)},i.prototype.write=function(t){let i;for(i=0;i<this.data.length;i++){let n=e.toSJIS(this.data[i]);if(n>=33088&&n<=40956)n-=33088;else{if(!(n>=57408&&n<=60351))throw new Error("Invalid SJIS character: "+this.data[i]+"\nMake sure your charset is UTF-8");n-=49472}n=192*(n>>>8&255)+(255&n),t.put(n,13)}},tn=i}(),s=Ui(),a=fi(),l=cn();function c(t){return unescape(encodeURIComponent(t)).length}function h(t,e,i){const n=[];let r;for(;null!==(r=t.exec(i));)n.push({data:r[0],index:r.index,mode:e,length:r[0].length});return n}function u(t){const i=h(s.NUMERIC,e.NUMERIC,t),n=h(s.ALPHANUMERIC,e.ALPHANUMERIC,t);let r,o;return a.isKanjiModeEnabled()?(r=h(s.BYTE,e.BYTE,t),o=h(s.KANJI,e.KANJI,t)):(r=h(s.BYTE_KANJI,e.BYTE,t),o=[]),i.concat(n,r,o).sort((function(t,e){return t.index-e.index})).map((function(t){return{data:t.data,mode:t.mode,length:t.length}}))}function d(t,s){switch(s){case e.NUMERIC:return i.getBitsLength(t);case e.ALPHANUMERIC:return n.getBitsLength(t);case e.KANJI:return o.getBitsLength(t);case e.BYTE:return r.getBitsLength(t)}}function f(t,s){let l;const c=e.getBestModeForData(t);if(l=e.from(s,c),l!==e.BYTE&&l.bit<c.bit)throw new Error('"'+t+'" cannot be encoded with mode '+e.toString(l)+".\n Suggested mode is: "+e.toString(c));switch(l!==e.KANJI||a.isKanjiModeEnabled()||(l=e.BYTE),l){case e.NUMERIC:return new i(t);case e.ALPHANUMERIC:return new n(t);case e.KANJI:return new o(t);case e.BYTE:return new r(t)}}t.fromArray=function(t){return t.reduce((function(t,e){return"string"==typeof e?t.push(f(e,null)):e.data&&t.push(f(e.data,e.mode)),t}),[])},t.fromString=function(i,n){const r=function(t,i){const n={},r={start:{}};let o=["start"];for(let s=0;s<t.length;s++){const a=t[s],l=[];for(let t=0;t<a.length;t++){const c=a[t],h=""+s+t;l.push(h),n[h]={node:c,lastCount:0},r[h]={};for(let t=0;t<o.length;t++){const s=o[t];n[s]&&n[s].node.mode===c.mode?(r[s][h]=d(n[s].lastCount+c.length,c.mode)-d(n[s].lastCount,c.mode),n[s].lastCount+=c.length):(n[s]&&(n[s].lastCount=c.length),r[s][h]=d(c.length,c.mode)+4+e.getCharCountIndicator(c.mode,i))}}o=l}for(let t=0;t<o.length;t++)r[o[t]].end=0;return{map:r,table:n}}(function(t){const i=[];for(let n=0;n<t.length;n++){const r=t[n];switch(r.mode){case e.NUMERIC:i.push([r,{data:r.data,mode:e.ALPHANUMERIC,length:r.length},{data:r.data,mode:e.BYTE,length:r.length}]);break;case e.ALPHANUMERIC:i.push([r,{data:r.data,mode:e.BYTE,length:r.length}]);break;case e.KANJI:i.push([r,{data:r.data,mode:e.BYTE,length:c(r.data)}]);break;case e.BYTE:i.push([{data:r.data,mode:e.BYTE,length:c(r.data)}])}}return i}(u(i,a.isKanjiModeEnabled())),n),o=l.find_path(r.map,"start","end"),s=[];for(let t=1;t<o.length-1;t++)s.push(r.table[o[t]].node);return t.fromArray(s.reduce((function(t,e){const i=t.length-1>=0?t[t.length-1]:null;return i&&i.mode===e.mode?(t[t.length-1].data+=e.data,t):(t.push(e),t)}),[]))},t.rawSplit=function(e){return t.fromArray(u(e,a.isKanjiModeEnabled()))}}(an)),an);function f(t,e,i){const n=t.size,r=h.getEncodedBits(e,i);let o,s;for(o=0;o<15;o++)s=1==(r>>o&1),t.set(o<6?o:o<8?o+1:n-15+o,8,s,!0),t.set(8,o<8?n-o-1:o<9?15-o-1+1:15-o-1,s,!0);t.set(n-8,8,1,!0)}function p(e,h,p,g){let b;if(Array.isArray(e))b=d.fromArray(e);else{if("string"!=typeof e)throw new Error("Invalid data");{let t=h;if(!t){const i=d.rawSplit(e);t=c.getBestVersionForData(i,p)}b=d.fromString(e,t||40)}}const v=c.getBestVersionForData(b,p);if(!v)throw new Error("The amount of data is too big to be stored in a QR Code");if(h){if(h<v)throw new Error("\nThe chosen QR Code version cannot contain this amount of data.\nMinimum version required to store current data is: "+v+".\n")}else h=v;const m=function(e,n,r){const o=new i;r.forEach((function(t){o.put(t.mode.bit,4),o.put(t.getLength(),u.getCharCountIndicator(t.mode,e)),t.write(o)}));const s=8*(t.getSymbolTotalCodewords(e)-a.getTotalCodewordsCount(e,n));for(o.getLengthInBits()+4<=s&&o.put(0,4);o.getLengthInBits()%8!=0;)o.putBit(0);const c=(s-o.getLengthInBits())/8;for(let t=0;t<c;t++)o.put(t%2?17:236,8);return function(e,i,n){const r=t.getSymbolTotalCodewords(i),o=r-a.getTotalCodewordsCount(i,n),s=a.getBlocksCount(i,n),c=s-r%s,h=Math.floor(r/s),u=Math.floor(o/s),d=u+1,f=h-u,p=new l(f);let g=0;const b=new Array(s),v=new Array(s);let m=0;const k=new Uint8Array(e.buffer);for(let t=0;t<s;t++){const e=t<c?u:d;b[t]=k.slice(g,g+e),v[t]=p.encode(b[t]),g+=e,m=Math.max(m,e)}const y=new Uint8Array(r);let w,x,z=0;for(w=0;w<m;w++)for(x=0;x<s;x++)w<b[x].length&&(y[z++]=b[x][w]);for(w=0;w<f;w++)for(x=0;x<s;x++)y[z++]=v[x][w];return y}(o,e,n)}(h,p,b),k=t.getSymbolSize(h),y=new n(k);return function(t,e){const i=t.size,n=o.getPositions(e);for(let e=0;e<n.length;e++){const r=n[e][0],o=n[e][1];for(let e=-1;e<=7;e++)if(!(r+e<=-1||i<=r+e))for(let n=-1;n<=7;n++)o+n<=-1||i<=o+n||t.set(r+e,o+n,e>=0&&e<=6&&(0===n||6===n)||n>=0&&n<=6&&(0===e||6===e)||e>=2&&e<=4&&n>=2&&n<=4,!0)}}(y,h),function(t){const e=t.size;for(let i=8;i<e-8;i++){const e=i%2==0;t.set(i,6,e,!0),t.set(6,i,e,!0)}}(y),function(t,e){const i=r.getPositions(e);for(let e=0;e<i.length;e++){const n=i[e][0],r=i[e][1];for(let e=-2;e<=2;e++)for(let i=-2;i<=2;i++)t.set(n+e,r+i,-2===e||2===e||-2===i||2===i||0===e&&0===i,!0)}}(y,h),f(y,p,0),h>=7&&function(t,e){const i=t.size,n=c.getEncodedBits(e);let r,o,s;for(let e=0;e<18;e++)r=Math.floor(e/3),o=e%3+i-8-3,s=1==(n>>e&1),t.set(r,o,s,!0),t.set(o,r,s,!0)}(y,h),function(t,e){const i=t.size;let n=-1,r=i-1,o=7,s=0;for(let a=i-1;a>0;a-=2)for(6===a&&a--;;){for(let i=0;i<2;i++)if(!t.isReserved(r,a-i)){let n=!1;s<e.length&&(n=1==(e[s]>>>o&1)),t.set(r,a-i,n),o--,-1===o&&(s++,o=7)}if(r+=n,r<0||i<=r){r-=n,n=-n;break}}}(y,m),isNaN(g)&&(g=s.getBestMask(y,f.bind(null,y,p))),s.applyMask(g,y),f(y,p,g),{modules:y,version:h,errorCorrectionLevel:p,maskPattern:g,segments:b}}return ui.create=function(i,n){if(void 0===i||""===i)throw new Error("No input text");let r,o,a=e.M;return void 0!==n&&(a=e.from(n.errorCorrectionLevel,e.M),r=c.from(n.version),o=s.from(n.maskPattern),n.toSJISFunc&&t.setToSJISFunction(n.toSJISFunc)),p(i,r,a,o)},ui}var un,dn,fn={},pn={};function gn(){return un||(un=1,function(t){function e(t){if("number"==typeof t&&(t=t.toString()),"string"!=typeof t)throw new Error("Color should be defined as hex string");let e=t.slice().replace("#","").split("");if(e.length<3||5===e.length||e.length>8)throw new Error("Invalid hex color: "+t);3!==e.length&&4!==e.length||(e=Array.prototype.concat.apply([],e.map((function(t){return[t,t]})))),6===e.length&&e.push("F","F");const i=parseInt(e.join(""),16);return{r:i>>24&255,g:i>>16&255,b:i>>8&255,a:255&i,hex:"#"+e.slice(0,6).join("")}}t.getOptions=function(t){t||(t={}),t.color||(t.color={});const i=t.width&&t.width>=21?t.width:void 0;return{width:i,scale:i?4:t.scale||4,margin:null==t.margin||t.margin<0?4:t.margin,color:{dark:e(t.color.dark||"#000000ff"),light:e(t.color.light||"#ffffffff")},type:t.type,rendererOpts:t.rendererOpts||{}}},t.getScale=function(t,e){return e.width&&e.width>=t+2*e.margin?e.width/(t+2*e.margin):e.scale},t.getImageWidth=function(e,i){const n=t.getScale(e,i);return Math.floor((e+2*i.margin)*n)},t.qrToImageData=function(e,i,n){const r=i.modules.size,o=i.modules.data,s=t.getScale(r,n),a=Math.floor((r+2*n.margin)*s),l=n.margin*s,c=[n.color.light,n.color.dark];for(let t=0;t<a;t++)for(let i=0;i<a;i++){let h=4*(t*a+i),u=n.color.light;t>=l&&i>=l&&t<a-l&&i<a-l&&(u=c[o[Math.floor((t-l)/s)*r+Math.floor((i-l)/s)]?1:0]),e[h++]=u.r,e[h++]=u.g,e[h++]=u.b,e[h]=u.a}}}(pn)),pn}var bn,vn,mn={};var kn=function(){if(vn)return li;vn=1;const t=ci(),e=hn(),i=(dn||(dn=1,function(t){const e=gn();t.render=function(t,i,n){let r=n,o=i;void 0!==r||i&&i.getContext||(r=i,i=void 0),i||(o=function(){try{return document.createElement("canvas")}catch(t){throw new Error("You need to specify a canvas element")}}()),r=e.getOptions(r);const s=e.getImageWidth(t.modules.size,r),a=o.getContext("2d"),l=a.createImageData(s,s);return e.qrToImageData(l.data,t,r),function(t,e,i){t.clearRect(0,0,e.width,e.height),e.style||(e.style={}),e.height=i,e.width=i,e.style.height=i+"px",e.style.width=i+"px"}(a,o,s),a.putImageData(l,0,0),o},t.renderToDataURL=function(e,i,n){let r=n;return void 0!==r||i&&i.getContext||(r=i,i=void 0),r||(r={}),t.render(e,i,r).toDataURL(r.type||"image/png",(r.rendererOpts||{}).quality)}}(fn)),fn),n=function(){if(bn)return mn;bn=1;const t=gn();function e(t,e){const i=t.a/255,n=e+'="'+t.hex+'"';return i<1?n+" "+e+'-opacity="'+i.toFixed(2).slice(1)+'"':n}function i(t,e,i){let n=t+e;return void 0!==i&&(n+=" "+i),n}return mn.render=function(n,r,o){const s=t.getOptions(r),a=n.modules.size,l=n.modules.data,c=a+2*s.margin,h=s.color.light.a?"<path "+e(s.color.light,"fill")+' d="M0 0h'+c+"v"+c+'H0z"/>':"",u="<path "+e(s.color.dark,"stroke")+' d="'+function(t,e,n){let r="",o=0,s=!1,a=0;for(let l=0;l<t.length;l++){const c=Math.floor(l%e),h=Math.floor(l/e);c||s||(s=!0),t[l]?(a++,l>0&&c>0&&t[l-1]||(r+=s?i("M",c+n,.5+h+n):i("m",o,0),o=0,s=!1),c+1<e&&t[l+1]||(r+=i("h",a),a=0)):o++}return r}(l,a,s.margin)+'"/>',d='<svg xmlns="http://www.w3.org/2000/svg" '+(s.width?'width="'+s.width+'" height="'+s.width+'" ':"")+'viewBox="0 0 '+c+" "+c+'" shape-rendering="crispEdges">'+h+u+"</svg>\n";return"function"==typeof o&&o(null,d),d},mn}();function r(i,n,r,o,s){const a=[].slice.call(arguments,1),l=a.length,c="function"==typeof a[l-1];if(!c&&!t())throw new Error("Callback required as last argument");if(!c){if(l<1)throw new Error("Too few arguments provided");return 1===l?(r=n,n=o=void 0):2!==l||n.getContext||(o=r,r=n,n=void 0),new Promise((function(t,s){try{const s=e.create(r,o);t(i(s,n,o))}catch(t){s(t)}}))}if(l<2)throw new Error("Too few arguments provided");2===l?(s=r,r=n,n=o=void 0):3===l&&(n.getContext&&void 0===s?(s=o,o=void 0):(s=o,o=r,r=n,n=void 0));try{const t=e.create(r,o);s(null,i(t,n,o))}catch(t){s(t)}}return li.create=e.create,li.toCanvas=r.bind(null,i.render),li.toDataURL=r.bind(null,i.renderToDataURL),li.toString=r.bind(null,(function(t,e,i){return n.render(t,i)})),li}(),yn=rt(kn);const wn=class{constructor(e){t(this,e),this.toggleIsPublic=n(this,"toggleIsPublic"),this.dialogClosed=n(this,"dialogClosed")}get host(){return r(this)}isPublic=!1;workspaceId=void 0;terms={};onIsPublicChange(t){this.internalIsPublic=t,this.updateQrCodeDataUrl()}onWorkspaceIdChange(){this.updateQrCodeDataUrl()}isDialogOpen=!1;internalIsPublic=!1;copySuccess=!1;qrCodeDataUrl="";qrCodeUpdateSequence=0;toggleIsPublic;dialogClosed;async open(){this.internalIsPublic=this.isPublic,this.isDialogOpen=!0,await this.updateQrCodeDataUrl()}async close(){this.isDialogOpen=!1}handleToggleChange=t=>{const e=t.detail;this.internalIsPublic=e,this.updateQrCodeDataUrl(),this.toggleIsPublic.emit(e)};async updateQrCodeDataUrl(){if(!this.internalIsPublic)return void(this.qrCodeDataUrl="");const t=this.getShareUrl();if(!t)return void(this.qrCodeDataUrl="");const e=++this.qrCodeUpdateSequence;try{const i=await yn.toDataURL(t,{margin:1,width:180});if(e!==this.qrCodeUpdateSequence)return;this.qrCodeDataUrl=i}catch{if(e!==this.qrCodeUpdateSequence)return;this.qrCodeDataUrl=""}}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:"b96c4cc6a9e4778715f496574f307a540285f70c"},e("kritzel-dialog",{key:"9a9cead56cc50042f59f677c0a846fc9fff01a8b",dialogTitle:this.terms["share.dialogTitle"]??"Share Workspace",size:"small",isOpen:this.isDialogOpen,onDialogClose:this.closeDialog,contained:!0},e("div",{key:"f1ffe37126343d84f9cb70f85530596d594c6e04",class:"share-content"},e("div",{key:"e1b20fccdb127eb30d240a2812742977b6512113",class:"share-section"},e("div",{key:"fb0d4226d638309fd5696dace0cc0c73d82150fc",class:"share-row"},e("div",{key:"301a27b975bb63610d94e1140aef39aa0594dda6",class:"share-label-group"},e("label",{key:"acf694843423d42414951ae88ec7eee541dd8f7f",class:"share-label"},this.terms["share.linkSharing.label"]??"Link sharing"),e("p",{key:"4c29b6448a27c69fceadb4166bc878216010475f",class:"share-description"},this.internalIsPublic?this.terms["share.linkSharing.enabledDescription"]??"Anyone with the link can access this workspace.":this.terms["share.linkSharing.disabledDescription"]??"Link sharing is disabled. Only you can access this workspace.")),e("kritzel-slide-toggle",{key:"c813213e7cf53125993de209e15c921779c019b6",checked:this.internalIsPublic,onCheckedChange:this.handleToggleChange,label:this.terms["share.linkSharing.toggleLabel"]??"Enable link sharing"}))),this.internalIsPublic&&e("div",{key:"af32cbadc775ce4ca3c79bdc0f8b4351c8723b28",class:"share-section"},e("div",{key:"d5c4e2b8a77306a141cc73c37dc6c57b1dc9daa5",class:"share-url-container"},e("input",{key:"f2f364c3fabd7f693247f5ad05594bd089a194ea",type:"text",class:"share-url-input",value:this.getShareUrl(),readOnly:!0,onClick:t=>t.target.select()}),e("button",{key:"d27a6f00e6b14bff3f4c8d1694cc8a38eebc5ec0",class:{"copy-button":!0,"copy-success":this.copySuccess},onClick:this.handleCopyUrl,title:this.copySuccess?this.terms["share.copyLink.copied"]??"Copied!":this.terms["share.copyLink.title"]??"Copy link"},e("kritzel-icon",{key:"60c72ee8d789dc14baa4c169f70c78837b0cbd0c",name:this.copySuccess?"check":"copy",size:18}))),this.qrCodeDataUrl&&e("div",{key:"f5d361b7ed145ab5f4f7b89f9c63046ce831220b",class:"share-qr-container"},e("img",{key:"5f2d4650dffab907f5a53dfb2fd4c337da3e51ee",class:"share-qr-image",src:this.qrCodeDataUrl,alt:"QR code for share link"}))))))}static get watchers(){return{isPublic:[{onIsPublicChange:0}],workspaceId:[{onWorkspaceIdChange:0}]}}};wn.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-qr-container{display:flex;justify-content:center;margin-top:16px;margin-bottom:16px}.share-qr-image{width:180px;height:180px;border-radius:8px;border:1px solid var(--kritzel-share-dialog-qr-border-color, #e0e0e0);background:var(--kritzel-share-dialog-qr-background, #ffffff);padding:8px;box-sizing:border-box}.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 xn=class{constructor(e){t(this,e),this.checkedChange=n(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:"00160c9cfdafa0d53f3acfb1fb235b29abf2622a",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:"385008948ffbdc0f26249d2d833aae8f04eeb6a0",class:"toggle-track"},e("div",{key:"43929e94335589feb24ee45f1c34a270653dd412",class:"toggle-thumb"})))}};xn.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 zn=class{constructor(e){t(this,e),this.mainButtonClick=n(this,"mainButtonClick"),this.itemSelect=n(this,"itemSelect"),this.itemSave=n(this,"itemSave"),this.itemCancel=n(this,"itemCancel"),this.itemToggleChildMenu=n(this,"itemToggleChildMenu"),this.itemCloseChildMenu=n(this,"itemCloseChildMenu"),this.menuOpen=n(this,"menuOpen"),this.menuClose=n(this,"menuClose")}get host(){return r(this)}buttonIcon="plus";dropdownIcon="chevron-down";items=[];mainButtonDisabled=!1;menuButtonDisabled=!1;mainButtonClick;itemSelect;itemSave;itemCancel;itemToggleChildMenu;itemCloseChildMenu;menuOpen;menuClose;isMenuOpen=!1;isTouchDevice=l.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:"fa22dc1185ef07d8127d9ee9f6dbe482d126f934",class:{mobile:this.isTouchDevice}},e("button",{key:"a48aba702b70e9b24ad5486dde61fa9f9c8f7cdc",class:"split-main-button",tabIndex:0,onClick:this.handleButtonClick,disabled:this.mainButtonDisabled,"aria-label":"Main action"},this.buttonIcon&&e("kritzel-icon",{key:"0d1c9a3e9f744541dd6ebe491105f6ee65233543",name:this.buttonIcon})),e("div",{key:"c9db29f0b9c9cf1974d78f4f60be9e1b0e26c5d2",class:"split-divider"}),e("button",{key:"57addfd5228b7c7668be902c53683d12c976b89b",ref:t=>this.splitMenuButtonRef=t,class:"split-menu-button",tabIndex:0,onClick:this.toggleMenu,disabled:this.menuButtonDisabled,"aria-label":"Open menu"},e("kritzel-icon",{key:"d860cc503043425860b1234b5d34693bfdd1d5ab",name:this.dropdownIcon})),e("kritzel-portal",{key:"cd6dda8869aea4205d922fc639073019bbd2b102",anchor:this.anchorElement,offsetY:4,onClose:this.closeMenu},e("kritzel-menu",{key:"1ef1c2b319662e7a2af15b46362addcc75bceb68",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})))}};zn.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 Cn=class{constructor(e){t(this,e),this.sizeChange=n(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:"ba181d798d2bf7b60308746635d2077ce1353b83"},e("div",{key:"048fc8934190359b9337747567844ca88925a6ce",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}))))))}};Cn.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(auto-fill, 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 Sn=class{constructor(e){t(this,e),this.toolChange=n(this,"toolChange"),this.displayValuesChange=n(this,"displayValuesChange")}tool;handleToolChange(t,e){const i=ft.getToolConfig(t);if(e&&t&&"shape"===i?.type){const n=ft.getToolConfig(e);"shape"===n?.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.updateSizes(),this.currentOpacity=t[this.config.opacityProperty]??1,this.emitDisplayValues())}isExpanded=!1;theme;engine;terms={};handleSelectionChangeBound=this.handleSelectionChange.bind(this);onThemeChange(){this.emitDisplayValues()}handleEngineChange(t,e){e&&e.removeEventListener("objectsSelectionChange",this.handleSelectionChangeBound),t&&t.addEventListener("objectsSelectionChange",this.handleSelectionChangeBound)}toolChange;displayValuesChange;config;palette=[];sizes=[];currentOpacity=1;updateTrigger=0;handleSelectionChange(){this.tool instanceof c&&(this.config=ft.getToolConfig(this.tool),this.config&&(this.updatePalette(),this.updateSizes(),this.currentOpacity=this.tool[this.config.opacityProperty]??1,this.emitDisplayValues()))}disconnectedCallback(){this.engine&&this.engine.removeEventListener("objectsSelectionChange",this.handleSelectionChangeBound)}componentWillLoad(){this.config=ft.getToolConfig(this.tool),this.config&&(this.updatePalette(),this.updateSizes(),this.currentOpacity=this.tool[this.config.opacityProperty]??1,this.emitDisplayValues()),this.engine&&this.engine.addEventListener("objectsSelectionChange",this.handleSelectionChangeBound)}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 h&&(e.fontFamily=this.tool.fontFamily),this.displayValuesChange.emit(e)}updatePalette(){this.config&&(this.palette="none"===this.config.paletteSource?[]:this.tool.palette||[])}updateSizes(){this.config&&(this.sizes="none"===this.config.sizesSource?[]:this.tool.sizes||[])}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,sizes:this.sizes,selectedSize:i,onSizeChange:this.handleSizeChange});case"font-size":return e("kritzel-font-size",{key:t.type,sizes:this.sizes,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,n=this.palette.length>0,r=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"}},n&&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}),r&&this.renderControl(r),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?this.terms["toolConfig.collapse"]??"Collapse":this.terms["toolConfig.expand"]??"Expand"},e("kritzel-icon",{name:this.isExpanded?"chevron-up":"chevron-down"})))))}static get watchers(){return{tool:[{handleToolChange:0}],theme:[{onThemeChange:0}],engine:[{handleEngineChange:0}]}}};Sn.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 In=class{constructor(e){t(this,e),this.tooltipClosed=n(this,"tooltipClosed"),this.tooltipOpened=n(this,"tooltipOpened")}get host(){return r(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)),n=this.triggerElement&&e.some((t=>t===this.triggerElement));i||n||this.close()}handleOutsidePointerDown(t){if(!this.isVisible)return;const e=t.composedPath(),i=e.some((t=>t===this.host)),n=this.triggerElement&&e.some((t=>t===this.triggerElement));i||n||(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=d.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(),n=i?.width||0,r=12,o=window.innerWidth-n-r;this.positionX=Math.max(r,Math.min(t.left+t.width/2-n/2,o)),this.positionY=window.innerHeight-t.top+this.offsetY}}render(){return e(i,{key:"1e318ff48b72ae5e0853a92c61fd4174d6e45271",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:"c66c9978787c59de6ca29944f666354fed2ab4c3",class:"tooltip-content",onClick:t=>t.stopPropagation(),onPointerDown:t=>t.stopPropagation(),onMouseDown:t=>t.stopPropagation()},e("slot",{key:"664e78076bb988b0829b805aad4393c443db2dc7"})))}static get watchers(){return{triggerElement:[{handleTriggerElementChange:0}],isVisible:[{handleVisibilityChange:0}]}}};In.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 Mn=class{constructor(e){t(this,e),this.undo=n(this,"undo"),this.redo=n(this,"redo"),this.delete=n(this,"delete")}undoState=null;terms={};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:"90b96b2f4693016650394e085c1ccf5c61759713"},e("button",{key:"325e3a869061ce7fda2d86e74250f4ea7414da8e",class:"utility-button","data-testid":"utility-undo",disabled:!this.undoState?.canUndo,onClick:t=>this.handleUndo(t),"aria-label":this.terms["utility.undo"]??"Undo"},e("kritzel-icon",{key:"70335427bc3a9a54a994ad22935bde4010d8f96b",name:"undo"})),e("button",{key:"cf3000675d594ffe64f947b57e5aabe084be32a7",class:"utility-button","data-testid":"utility-redo",disabled:!this.undoState?.canRedo,onClick:t=>this.handleRedo(t),"aria-label":this.terms["utility.redo"]??"Redo"},e("kritzel-icon",{key:"b33336374abb36a7cdb685fb970805ec1f4073e2",name:"redo"})),e("div",{key:"34323fd33574ba65c825687fec5b772facbd2c62",class:"utility-separator"}),e("button",{key:"aff157ab166ed15b8f9172b5b63f62996ed51c6e",class:"utility-button","data-testid":"utility-delete",onClick:()=>this.delete.emit(),"aria-label":this.terms["utility.delete"]??"Delete selected items"},e("kritzel-icon",{key:"413104d9d493fc47ad5ae8e61af514dfd530f6ee",name:"delete"})))}};Mn.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:1}.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 $n=class{constructor(e){t(this,e)}core;label;render(){const t=this.label??this.core.localizationManager.translate("watermark.poweredBy");return e(i,{key:"0eccc75e51c7ac199e23d8f3a871593f1fb65a17"},e("a",{key:"2029f8b56ba8609ca621447eac0df9d30ebfbbbe",class:"watermark-link",href:"https://kritzel.io",target:"_blank",rel:"noopener noreferrer",part:"watermark",onPointerDown:t=>t.stopPropagation(),onPointerUp:t=>t.stopPropagation()},t))}};$n.style=":host{position:absolute;bottom:var(--kritzel-watermark-offset-bottom, 12px);right:var(--kritzel-watermark-offset-right, 12px);z-index:10000;pointer-events:none}.watermark-link{pointer-events:auto;display:inline-flex;align-items:center;padding:4px 8px;border-radius:var(--kritzel-watermark-border-radius, 6px);font-family:var(--kritzel-font-family, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif);font-size:var(--kritzel-watermark-font-size, 11px);line-height:1;text-decoration:none;color:var(--kritzel-watermark-color, rgba(60, 60, 60, 0.75));background-color:var(--kritzel-watermark-background, rgba(255, 255, 255, 0.6));box-shadow:var(--kritzel-watermark-box-shadow, 0 1px 2px rgba(0, 0, 0, 0.12));opacity:var(--kritzel-watermark-opacity, 0.85);transition:opacity 150ms ease;user-select:none}.watermark-link:hover{opacity:1}";const Tn=class{constructor(e){t(this,e),this.isWorkspaceManagerReady=n(this,"isWorkspaceManagerReady"),this.workspaceChange=n(this,"workspaceChange")}get host(){return r(this)}visible=!1;activeWorkspace;workspaces=[];terms={};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 D(I.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?this.terms["workspace.sharedTooltip"]??"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:this.terms["workspace.rename"]??"Rename",value:"rename",action:(t,e)=>this.edit(e)},{id:`${t.id}-delete`,label:this.terms["workspace.delete"]??"Delete",value:"delete",isDisabled:this.sortedWorkspaces.length<=1,action:(t,e)=>this.delete(e)}]})));return e(i,{style:{display:this.visible?"":"none"}},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()})))}};Tn.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}";const jn=class{constructor(e){t(this,e),this.zoomIn=n(this,"zoomIn"),this.zoomOut=n(this,"zoomOut")}visible=!0;disabled=!1;zoomPercent=100;terms={};zoomIn;zoomOut;handleZoomIn=()=>{this.disabled||this.zoomIn.emit()};handleZoomOut=()=>{this.disabled||this.zoomOut.emit()};get normalizedZoomPercent(){return Number.isFinite(this.zoomPercent)?Math.max(1,Math.round(this.zoomPercent)):100}render(){return e(i,{key:"56b65a376d4bd94553416e07f2621192c4457bc2"},e("div",{key:"bdbfea3b3ee7e37eeb5c5f03388eb92ed8af9962",class:{panel:!0,visible:this.visible}},e("button",{key:"de5ad152aaf7965f731bee95170b67e62af94ea2",class:"zoom-button",type:"button","aria-label":this.terms["zoom.zoomOut"]??"Zoom out",disabled:this.disabled,onClick:this.handleZoomOut},e("kritzel-icon",{key:"104eb632666c55c032a40e6df2097aaa643fd23b",name:"minus"})),e("span",{key:"d601b324e26a6c2737138b8f151b13dcdb2d20ab",class:"zoom-level","aria-live":"polite"},this.normalizedZoomPercent,"%"),e("button",{key:"c976d03c69978f2d5cedf2a94b38419ed81088f6",class:"zoom-button",type:"button","aria-label":this.terms["zoom.zoomIn"]??"Zoom in",disabled:this.disabled,onClick:this.handleZoomIn},e("kritzel-icon",{key:"844105bd53f3307425789aa6baf0ac3c25407414",name:"plus"}))))}};jn.style=":host{display:block;z-index:1}.panel{display:flex;flex-direction:row;align-items:center;gap:var(--kritzel-zoom-panel-gap, 4px);padding:var(--kritzel-zoom-panel-padding, 4px);border:var(--kritzel-zoom-panel-border, 1px solid #ebebeb);border-radius:var(--kritzel-zoom-panel-border-radius, 12px);background-color:var(--kritzel-zoom-panel-background-color, #ffffff);box-shadow:var(--kritzel-zoom-panel-box-shadow, 0 0 3px rgba(0, 0, 0, 0.08));opacity:0;pointer-events:none;transition:opacity 0.2s ease-out}.panel.visible{opacity:1;pointer-events:auto}.zoom-level{display:inline-flex;align-items:center;justify-content:center;min-width:46px;color:var(--kritzel-zoom-panel-icon-color, #000000);font-family:var(--kritzel-font-family, sans-serif);font-size:12px;font-weight:500;line-height:1;padding:0 4px;user-select:none}.zoom-button{display:flex;align-items:center;justify-content:center;width:var(--kritzel-zoom-panel-button-size, 32px);height:var(--kritzel-zoom-panel-button-size, 32px);padding:0;border:0;border-radius:var(--kritzel-zoom-panel-button-border-radius, 8px);background:transparent;background-color:transparent;color:var(--kritzel-zoom-panel-icon-color, #000000);--kritzel-icon-color:var(--kritzel-zoom-panel-icon-color, #000000);box-shadow:none;appearance:none;cursor:var(--kritzel-global-pointer-cursor, pointer);-webkit-tap-highlight-color:transparent}.zoom-button:hover,.zoom-button:focus-visible{background-color:var(--kritzel-zoom-panel-button-hover-background-color, hsl(0, 0%, 0%, 4.3%))}.zoom-button:active{background-color:var(--kritzel-zoom-panel-button-active-background-color, hsl(0, 0%, 0%, 8.6%))}.zoom-button:disabled{opacity:0.5;cursor:not-allowed;pointer-events:none}";export{ot as kritzel_active_users,st as kritzel_avatar,at as kritzel_awareness_cursors,lt as kritzel_back_to_content,ct as kritzel_button,ht as kritzel_color,ut as kritzel_color_palette,dt as kritzel_context_menu,pt as kritzel_controls,gt as kritzel_current_user,bt as kritzel_current_user_dialog,vt as kritzel_cursor_trail,mt as kritzel_dialog,kt as kritzel_dropdown,Ct as kritzel_editor,_e as kritzel_engine,Oe as kritzel_export,De as kritzel_font,Fe as kritzel_font_family,Re as kritzel_font_size,Le as kritzel_icon,Pe as kritzel_input,Be as kritzel_line_endings,We as kritzel_loading_overlay,Ve as kritzel_login_dialog,Ne as kritzel_master_detail,Ke as kritzel_menu,Ue as kritzel_menu_item,He as kritzel_more_menu,Ge as kritzel_notification_card,qe as kritzel_numeric_input,Ye as kritzel_opacity_slider,Ze as kritzel_pill_tabs,Xe as kritzel_portal,ri as kritzel_settings,oi as kritzel_shape_fill,wn as kritzel_share_dialog,xn as kritzel_slide_toggle,zn as kritzel_split_button,Cn as kritzel_stroke_size,Sn as kritzel_tool_config,In as kritzel_tooltip,Mn as kritzel_utility_panel,$n as kritzel_watermark,Tn as kritzel_workspace_manager,jn as kritzel_zoom_panel}
|
|
9
|
+
*/class jt{_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=Tt.debounce((()=>{this._core.updateWorkspaceViewport(this._core.store.state.translateX,this._core.store.state.translateY,this._core.store.state.scale)}),300),this._debounceEndScaling=Tt.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:n,viewportWidth:r,viewportHeight:o}=i,{viewportBoundaryLeft:s,viewportBoundaryRight:a,viewportBoundaryTop:l,viewportBoundaryBottom:c}=i,h=-s*n,u=r-a*n,d=-l*n,f=o-c*n;let p=t,g=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)?g=Math.max(f,Math.min(d,e)):Number.isFinite(f)?g=Math.max(f,e):Number.isFinite(d)&&(g=Math.min(d,e)),{translateX:p,translateY:g}}getEffectiveMinScale(){const t=this._core.store.state,{viewportWidth:e,viewportHeight:i,scaleMin:n}=t,{viewportBoundaryLeft:r,viewportBoundaryRight:o,viewportBoundaryTop:s,viewportBoundaryBottom:a}=t,l=o-r,c=a-s;if(!Number.isFinite(l)||!Number.isFinite(c))return n;const h=Math.max(l>0?e/l:n,c>0?i/c:n);return Math.max(n,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===u.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 A)),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,n=e[0].clientY-this._core.store.offsetY,r=e[1].clientX-this._core.store.offsetX,o=e[1].clientY-this._core.store.offsetY;this.initialTouchDistance=Math.sqrt(Math.pow(i-r,2)+Math.pow(n-o,2)),this.startX=(i+r)/2,this.startY=(n+o)/2,this._core.rerender()}}}handlePointerMove(t){if("mouse"===t.pointerType){const e=this._core.store.host.getBoundingClientRect(),i=t.clientX-e.left,n=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=(n-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+(n-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=n,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,n=t.clientY-e.top,r=Array.from(this._core.store.state.pointers.values());if(this._core.store.state.isScaling||r.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=(n-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)>=jt.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===r.length){const t=r[0].clientX-this._core.store.offsetX,e=r[0].clientY-this._core.store.offsetY,i=r[1].clientX-this._core.store.offsetX,n=r[1].clientY-this._core.store.offsetY,o=Math.sqrt(Math.pow(t-i,2)+Math.pow(e-n,2)),s=(t+i)/2,a=(e+n)/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 n=this._core.store.state,r=Math.min(n.scaleMax,Math.max(this.getEffectiveMinScale(),i));this.animateViewportTo(n.viewportWidth/2-t*r,n.viewportHeight/2-e*r,r)}panTo(t,e){this.setViewport(t,e,this._core.store.state.scale)}zoomTo(t,e,i){const n=this._core.store.state;void 0!==e&&void 0!==i?this.setViewport(e,i,t):this.setViewport((n.viewportWidth/2-n.translateX)/n.scale,(n.viewportHeight/2-n.translateY)/n.scale,t)}zoomIn(t,e){this.animateZoomAroundViewportCenter(t,e)}zoomOut(t,e){this.animateZoomAroundViewportCenter(1/t,e)}animateZoomAroundViewportCenter(t,e){this.cancelViewportAnimation();const i=this._core.store.state,n=i.scale,r=this.getEffectiveMinScale(),o=Math.min(i.scaleMax,Math.max(r,n*t)),s=i.viewportWidth/2,a=i.viewportHeight/2,l=(s-i.translateX)/n,c=(a-i.translateY)/n;if(o===n||e<=0)return this.applyZoomAroundCenter(o,s,a,l,c),i.isScaling=!0,this._core.rerender(),this._debounceUpdate(),void this._debounceEndScaling();const h=performance.now();i.isScaling=!0;const u=t=>{const r=Math.min((t-h)/e,1),d=r<.5?4*r*r*r:1-Math.pow(-2*r+2,3)/2;this.applyZoomAroundCenter(n+(o-n)*d,s,a,l,c),this._core.rerender(),r<1?this._animationFrameId=requestAnimationFrame(u):(this._animationFrameId=null,i.isScaling=!1,this._core.rerender(),this._debounceUpdate())};this._animationFrameId=requestAnimationFrame(u)}applyZoomAroundCenter(t,e,i,n,r){const o=this._core.store.state;o.scale=t;const s=this.clampTranslate(e-n*t,i-r*t);o.translateX=s.translateX,o.translateY=s.translateY,o.hasViewportChanged=!0}centerInViewport(t){const{scale:e,viewportWidth:i,viewportHeight:n}=this._core.store.state,{x:r,y:o,width:s,height:a}=t.rotatedBoundingBox,l=this.clampTranslate(i/2-(r+s/2)*e,n/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)}centerFitInViewportIfNeeded(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());i<this._core.store.state.scale&&(this._core.store.state.scale=i),this.centerInViewport(t)}fitInViewportIfNeeded(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());i<this._core.store.state.scale&&(this._core.store.state.scale=i,this.centerInViewport(t))}bringIntoViewIfNeeded(t){const{scale:e,translateX:i,translateY:n,viewportWidth:r,viewportHeight:o}=this._core.store.state,s=t.rotatedBoundingBox;if(s.x*e+i>=0&&s.y*e+n>=0&&(s.x+s.width)*e+i<=r&&(s.y+s.height)*e+n<=o)return;const a=Math.min(r/(1.1*s.width),o/(1.1*s.height),this._core.store.state.scaleMax),l=Math.max(a,this.getEffectiveMinScale()),c=Math.min(l,e),h=this.clampTranslate(r/2-(s.x+s.width/2)*c,o/2-(s.y+s.height/2)*c);this.animateViewportTo(h.translateX,h.translateY,c)}handleZoom(t){this._core.store.state.isScaling=!0;const e=this._core.store.host.getBoundingClientRect(),i=t.clientX-e.left,n=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=(n-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 r=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*r)),a=s/this._core.store.state.scale,l=(i-this._core.store.state.translateX)*(a-1),c=(n-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,n=150){this.cancelViewportAnimation();const r=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)/n,1),u=1-Math.pow(1-h,3);this._core.store.state.scale=s+(i-s)*u;const d=this.clampTranslate(r+(t-r)*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,n=-this._core.store.state.translateY/this._core.store.state.scale+this._core.store.state.viewportHeight/2/this._core.store.state.scale,r=e.map((t=>{const e=t.rotatedBoundingBox,r=e.y+e.height/2;return{obj:t,distance:Math.sqrt(Math.pow(e.x+e.width/2-i,2)+Math.pow(r-n,2))}}));r.sort(((t,e)=>t.distance-e.distance));const o=r.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),g=Math.max(p,this.getEffectiveMinScale());return this.animateViewportTo(this._core.store.state.viewportWidth/2-d*g,this._core.store.state.viewportHeight/2-f*g,g),!0}centerFitObjects(t,e=!0){if(0===t.length)return!1;let i=1/0,n=1/0,r=-1/0,o=-1/0;for(const e of t){const t=e.rotatedBoundingBox;i=Math.min(i,t.x),n=Math.min(n,t.y),r=Math.max(r,t.x+t.width),o=Math.max(o,t.y+t.height)}const s=r-i,a=o-n,l=i+s/2,c=n+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,e?150:0),!0}centerFitAllObjects(t=!0){return this.centerFitObjects(this._core.store.allNonSelectionObjects,t)}}class At extends O{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:"+",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=this._core.toolRegistry.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||this._core.store.activeInteractiveCustomElement)&&"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:n,category:r})=>({key:t,ctrl:e,shift:i,label:n,category:r})))}}class Et extends O{globalContextMenuItems=[];objectContextMenuItems=[];constructor(t,e,i){super(t),this.globalContextMenuItems=e,this.objectContextMenuItems=i}resolveLabels(t){return t.map((t=>({...t,label:this._core.localizationManager.translate(t.label),children:t.children?this.resolveLabels(t.children):void 0})))}getResolvedContextMenuItems(){return this.resolveLabels(this._core.store.selectionGroup?this.objectContextMenuItems:this.globalContextMenuItems)}handleContextMenu(t){if(!(this._core.store.state.activeTool instanceof c))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 A)),this._core.store.setSelectionBox(null),this._core.store.state.isSelecting=!1);const i=this._core.getObjectFromPointerEvent(t,".object");if(i&&!(i instanceof j)&&!(i instanceof A)){const t=j.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.getResolvedContextMenuItems();const n=t.clientX-this._core.store.offsetX,r=t.clientY-this._core.store.offsetY,{translateX:o,translateY:s,scale:a}=this._core.store.state;this._core.store.state.contextMenuWorldX=(n-o)/a,this._core.store.state.contextMenuWorldY=(r-s)/a;let l=n,h=r;l+150>this._core.store.state.viewportWidth-10&&(l=this._core.store.state.viewportWidth-150-10),l=Math.max(10,l),h=Math.max(10,h),this._core.store.state.contextMenuX=l,this._core.store.state.contextMenuY=h,this._core.store.state.isContextMenuVisible=!0,this._core.store.state.isEnabled=!1,this._core.rerender()}open(t){const{x:e,y:i,objectId:n}=t;if(this._core.store.state.activeTool instanceof c){const t=this._core.store.state.activeTool;t?.moveHandler?.cancelPendingDrag()}if(this._core.store.selectionBox&&(this._core.store.objects.remove((t=>t instanceof A)),this._core.store.setSelectionBox(null),this._core.store.state.isSelecting=!1),n){const t=this._core.store.allObjects.find((t=>t.id===n));if(t&&!(t instanceof j)&&!(t instanceof A)){const e=j.create(this._core);e.addOrRemove(t),e.isSelected=!0,e.rotation=t.rotation,this._core.store.state.isSelecting=!1,this._core.store.selectionGroup&&this._core.removeSelectionGroup(),this._core.addSelectionGroup(e)}}this._core.store.state.contextMenuItems=this.getResolvedContextMenuItems(),this._core.store.state.contextMenuWorldX=e,this._core.store.state.contextMenuWorldY=i;const{translateX:r,translateY:o,scale:s}=this._core.store.state;let a=e*s+r,l=i*s+o;a+150>this._core.store.state.viewportWidth-10&&(a=this._core.store.state.viewportWidth-150-10),a=Math.max(10,a),l=Math.max(10,l),this._core.store.state.contextMenuX=a,this._core.store.state.contextMenuY=l,this._core.store.state.isContextMenuVisible=!0,this._core.store.state.isEnabled=!1,this._core.rerender()}}class _t{_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=B.create(this._core,t.fontSize,t.fontFamily).deserialize(t);break;case"KritzelShape":e=P.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=L.create(this._core).deserialize(t);break;case"KritzelCustomElement":e=R.create(this._core).deserialize(t);break;case"KritzelSelectionGroup":e=j.create(this._core).deserialize(t);break;case"KritzelGroup":e=F.create(this._core).deserialize(t);break;case"KritzelWorkspace":e=D.create(this._core,t).deserialize(t);break;case"KritzelBrushTool":e=new v(this._core);break;case"KritzelEraserTool":e=new m(this._core);break;case"KritzelImageTool":e=new z(this._core);break;case"KritzelSelectionTool":e=new c(this._core);break;case"KritzelTextTool":e=new h(this._core);break;case"KritzelLineTool":e=new y(this._core);break;case"KritzelShapeTool":e=new w(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 Ot={activeWorkspace:void 0,activeTool:null,objects:null,snapCandidate:null,snapPreviewCandidate: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,contextMenuWorldX:0,contextMenuWorldY:0,skipContextMenu:!1,debugInfo:{showObjectInfo:!1,showViewportInfo:!1,showSyncProviderInfo:!1,showAssetResolverInfo:!1,showMigrationInfo:!1},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 Dt{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 n=this.calculateSelectionBounds(t);for(const r of t){const t=r.rotatedBoundingBox;let o=r.translateX,s=r.translateY;const a=t.x-r.translateX,l=t.y-r.translateY;switch(e){case C.StartHorizontal:o=n.minX-a;break;case C.CenterHorizontal:o=r.translateX+((n.minX+n.maxX)/2-(t.x+t.width/2));break;case C.EndHorizontal:o=r.translateX+(n.maxX-(t.x+t.width));break;case C.StartVertical:s=n.minY-l;break;case C.CenterVertical:s=r.translateY+((n.minY+n.maxY)/2-(t.y+t.height/2));break;case C.EndVertical:s=r.translateY+(n.maxY-(t.y+t.height))}i.set(r.id,{translateX:o,translateY:s})}return i}}class Ft{core;registry={};constructor(t){this.core=t}registerTool(t,e){const i=new e(this.core);return i.name=t,this.registry[t]=i,i}hasTool(t){return t in this.registry}getTool(t){return this.registry[t]||(console.warn(`Unknown tool: ${t}`),null)}getToolByIndex(t){return Object.values(this.registry)[t]??null}}class Rt{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}reindex(t){return 0!==this.remove((e=>e.id===t.id))&&this.insert(t)}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:n,height:r}=this.bounds,o=n/2,s=r/2;this.children=[new Rt({x:t,y:e,z:i,width:o,height:s},this.capacity),new Rt({x:t+o,y:e,z:i,width:o,height:s},this.capacity),new Rt({x:t,y:e+s,z:i,width:o,height:s},this.capacity),new Rt({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 Lt{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;_networkSyncPromise=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}whenNetworkSynced(){return this._networkSyncPromise??Promise.resolve()}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,n=this.quadtree.filter((t=>t instanceof j&&null!=t.userId&&t.userId!==i&&!e.has(t.userId)));for(const t of n)this.quadtree.remove((e=>e.id===t.id)),this._idMap.delete(t.id),this._objectsMap&&this._ydoc.transact((()=>{this._objectsMap.delete(t.id)}),"local");n.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 Rt({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 _t(t),this._ydoc=new it.Doc,this._objectsMap=this._ydoc.getMap("objects"),this._metadataMap=this._ydoc.getMap("metadata");const n=t.editorId?`kritzel-workspace-${t.editorId}-${e}`:`kritzel-workspace-${e}`,r=i??zt,o=!!t.store?.state?.debugInfo?.showSyncProviderInfo,s=!o;for(const t of r.providers){let e;e="function"==typeof t?new t(n,this._ydoc,{quiet:s}):t.create(n,this._ydoc,{quiet:s}),this._providers.push(e)}if(o){const t=this._providers.map((t=>`${t.constructor.name} (${t.type})`)).join(", ");console.info(`[Kritzel] Workspace sync providers initialized for ${n}: ${t||"none"}`)}this._undoManager=new it.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 a=this._providers.filter((t=>"local"===t.type)),l=this._providers.filter((t=>"network"===t.type)),c=await Promise.allSettled(a.map((t=>t.connect())));if(o){const t=c.filter((t=>"fulfilled"===t.status)).length;console.info(`[Kritzel] Workspace local providers connected: ${t}/${a.length}`)}c.forEach(((t,e)=>{o&&"rejected"===t.status&&console.error(`[Kritzel] Sync provider "${a[e]?.constructor.name}" failed to connect:`,t.reason)})),o&&l.length>0&&console.info(`[Kritzel] Workspace network providers connecting in background: ${l.length}`);const h=l.map((t=>t.connect().catch((e=>{o&&console.error(`[Kritzel] Network sync provider "${t.constructor.name}" failed to connect:`,e)}))));this._networkSyncPromise=h.length>0?Promise.allSettled(h).then((()=>{})):null,this._isReady=!0;for(const t of l)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??""),W(this._ydoc,this._metadataMap,{objects:this._objectsMap},N,V,{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=[],n=[],r=[];let o=!1;e.forEach((e=>{const a=t.changes.keys.get(e);if(a&&"delete"===a.action)r.push(e),this._idMap.get(e)instanceof s&&(o=!0);else{const t=this._objectsMap?.get(e);if(t){const e=this._reviver?.revive(t);e instanceof j?n.push(e):(i.push(e),e instanceof s&&(o=!0))}}})),r.forEach((t=>{const e=this._idMap.get(t);e instanceof j&&e.deselectAllChildren?.(),this.quadtree.remove((e=>e.id===t)),this._idMap.delete(t)}));const a=[],l=[];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.reindex(t),this._idMap.set(t.id,t),l.push(t)}else this.quadtree.insert(t),this._idMap.set(t.id,t),a.push(t)}));const c=new Set;if(n.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.reindex(t),this._idMap.set(t.id,t)}else this.quadtree.insert(t),this._idMap.set(t.id,t);c.add(t.id),t.invalidateObjectsCache(),t.refreshObjectDimensions(void 0,!0),t.captureUnchangedSnapshots(),this.quadtree.reindex(t)})),i.length>0||r.length>0){const t=new Set([...i.map((t=>t.id)),...r]),e=this.quadtree.filter((t=>t instanceof j&&!c.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.reindex(i))}if(o&&this._core?.anchorManager.rebuildIndex(),this._core?.store.invalidateSelectionCache(),this._core?.rerender(),a.length>0&&this._core?.engine.emitObjectsAdded(a),r.length>0){const t=r.map((t=>({id:t})));this._core?.engine.emitObjectsRemoved(t)}l.length>0&&this._core?.engine.emitObjectsUpdated(l.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",V),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,n)=>{const r=this._reviver?.revive(i);r instanceof j&&null!=r.userId&&r.userId!==t?e.push(n):r&&(this.quadtree.insert(r),this._idMap.set(r.id,r))})),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._localOnlyMode||e.skipReindex?this.quadtree.update(t):this.quadtree.reindex(t),this._idMap.set(t.id,t),!this._localOnlyMode&&this._objectsMap&&this.isPersistable(t)){const i=t.serialize(),n=e.temporary?"temporary":"local";this._ydoc?.transact((()=>{this._objectsMap?.set(t.id,i)}),n)}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 A)}undo(){this._undoManager&&this._undoManager.canUndo()&&(this._undoManager.undo(),this._core?.anchorManager.rebuildIndex(),this._core?.engine.emitObjectsChange())}redo(){this._undoManager&&this._undoManager.canRedo()&&(this._undoManager.redo(),this._core?.anchorManager.rebuildIndex(),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 Pt{_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 j||t instanceof A))).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,n=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(n)?n-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 j||t instanceof A)))}get selectedObjects(){return this.allObjects.filter((t=>!(t instanceof j))).filter((t=>t.isSelected))}get selectionBox(){if(this._selectionBoxCacheValid)return this._cachedSelectionBox;const t=this.objects.filter((t=>t instanceof A));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 j));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 B&&t.isEditing));return t.length>0?t[0]:null}get activeShape(){const t=this.objects.filter((t=>t instanceof P&&t.isEditing));return t.length>0?t[0]:null}get activeInteractiveCustomElement(){return this.selectedObjects.find((t=>K.isInstanceOf(t,"KritzelCustomElement")&&t.hasFocusedInputElement()))??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,contextMenuItems:[...t.contextMenuItems],debugInfo:{...t.debugInfo},pointers:new Map(t.pointers),workspaces:[...t.workspaces],cursor:{...t.cursor}},this._state.objects=new Lt}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 n=this._listeners.get(t);n&&n.forEach((n=>n(e,i,String(t))))}}}class Bt{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 it.Doc,this._workspacesMap=this._ydoc.getMap("workspaces"),this._metadataMap=this._ydoc.getMap("metadata");const i=e?.appStateId??this.getOrCreateAppStateInstanceId(t),n=t.editorId?`kritzel-app-state-${t.editorId}-${i}`:`kritzel-app-state-${i}`,r=e??zt,o=!!t.store.state.debugInfo.showSyncProviderInfo,s=!o;for(const t of r.providers){let e;e="function"==typeof t?new t(n,this._ydoc,{quiet:s}):t.create(n,this._ydoc,{quiet:s}),this._providers.push(e)}if(o){const t=this._providers.map((t=>`${t.constructor.name} (${t.type})`)).join(", ");console.info(`[Kritzel] App-state sync providers initialized for ${n}: ${t||"none"}`)}this._workspacesObserver=t=>{this.handleWorkspacesChange(t)},this._workspacesMap.observe(this._workspacesObserver);const a=this._providers.filter((t=>"local"===t.type)),l=this._providers.filter((t=>"network"===t.type)),c=await Promise.allSettled(a.map((t=>t.connect())));if(o){const t=c.filter((t=>"fulfilled"===t.status)).length;console.info(`[Kritzel] App-state local providers connected: ${t}/${a.length}`)}c.forEach(((t,e)=>{o&&"rejected"===t.status&&console.error(`[Kritzel] Sync provider "${a[e]?.constructor.name}" failed to connect:`,t.reason)})),o&&l.length>0&&console.info(`[Kritzel] App-state network providers connecting in background: ${l.length}`);for(const t of l)t.connect().catch((e=>{o&&console.error(`[Kritzel] Network sync provider "${t.constructor.name}" failed to connect:`,e)}));this._isReady=!0,W(this._ydoc,this._metadataMap,{workspaces:this._workspacesMap},H,U,{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 n;try{n=e.getItem(i)}catch{throw new Error("[KritzelAppStateMap] Failed to read app-state instance id from localStorage.")}if(n)return n;const r=I.generateUUID();try{e.setItem(i,r)}catch{throw new Error("[KritzelAppStateMap] Failed to persist app-state instance id to localStorage.")}return r}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=[],n=[];e.forEach((e=>{const r=t.changes.keys.get(e);if(r&&"delete"===r.action)n.push(e);else{const t=this._workspacesMap.get(e);if(t){const e=this.reviveWorkspace(t);i.push(e)}}})),n.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 D(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",U)}),"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 Wt{_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",G.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,n=i.classList.contains("top-left"),r=i.classList.contains("bottom-right");this._core.store.state.cursor={icon:"move-vertical",rotation:e+(n||r?-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,n=t.cursor?.iconActive??i,r=t.cursor?.rotation,o=G.getCursor({iconName:e?n:i,rotation:r});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 Vt{_isFirefox=/firefox|fxios/i.test(navigator.userAgent);_isSafari=/safari/i.test(navigator.userAgent)&&!/chrome|chromium|crios|android|edg/i.test(navigator.userAgent);_requestHandlers=new Map;constructor(t){this.registerRequestPermissionHandler("clipboard-read",(async()=>{if(this._isFirefox||this._isSafari)return"granted";try{return"denied"===(await navigator.permissions.query({name:"clipboard-read"})).state?"denied":"granted"}catch{return"granted"}}))}registerRequestPermissionHandler(t,e){this._requestHandlers.set(t,e)}async checkPermission(t){return(await navigator.permissions.query({name:t})).state}async requestPermission(t){const e=this._requestHandlers.get(t);return e?e():this.checkPermission(t)}}class Nt{_core;_providers=[];constructor(t){this._core=t}register(t){this._providers.push(t)}async resolve(t){const e={core:this._core,event:t};for(const t of this._providers){if(!t.canHandle(e))continue;const i=await t.getPasteIntent(e);if("unknown"!==i.type)return i}return{type:"unknown"}}}const Kt="kritzel-clipboard/v1:";class Ut{canHandle(t){return!!t.event?.clipboardData}async getPasteIntent(t){const e=t.event?.clipboardData;if(!e)return{type:"unknown"};const i=Array.from(e.files??[]).filter((t=>t.type.startsWith("image/")));if(i.length>0)return{type:"image_files",files:i};if(e.types.includes("text/plain")){const t=this.determineTextPasteIntent(e.getData("text/plain"));if(t)return t}return{type:"unknown"}}parseClipboardPayload(t){if(!t||!t.startsWith(Kt))return null;try{const e=JSON.parse(t.slice(21));return 1===e?.version&&Array.isArray(e.objects)?e:null}catch{return null}}determineTextPasteIntent(t){const e=this.parseClipboardPayload(t);return e?{type:"kritzel_objects",payload:e}:t&&t.trim().length>0?{type:"plain_text",text:t}:null}}class Ht{canHandle(t){return!t.event?.clipboardData&&"undefined"!=typeof navigator&&!!navigator.clipboard}async getPasteIntent(t){if("undefined"==typeof navigator||!navigator.clipboard)return{type:"unknown"};const{clipboard:e}=navigator;if("granted"!==await t.core.permissionManager.checkPermission("clipboard-read")&&"granted"!==await t.core.permissionManager.requestPermission("clipboard-read"))return{type:"unknown"};if(e.read)try{const t=await e.read(),{imageFiles:i,text:n}=await this.processClipboardItems(t);if(i.length>0)return{type:"image_files",files:i};if(null!==n){const t=this.determineTextPasteIntent(n);if(t)return t}}catch{}if(e.readText){const t=this.determineTextPasteIntent(await e.readText());if(t)return t}return{type:"unknown"}}async processClipboardItems(t){const e=[];let i=null;return await Promise.all(t.map((async t=>{const n=t.types.find((t=>t.startsWith("image/")));if(n){const i=await t.getType(n);e.push(new File([i],"pasted-image",{type:n}))}else if(null===i&&t.types.includes("text/plain")){const e=await t.getType("text/plain");i=await e.text()}}))),{imageFiles:e,text:i}}parseClipboardPayload(t){if(!t||!t.startsWith(Kt))return null;try{const e=JSON.parse(t.slice(21));return 1===e?.version&&Array.isArray(e.objects)?e:null}catch{return null}}determineTextPasteIntent(t){const e=this.parseClipboardPayload(t);return e?{type:"kritzel_objects",payload:e}:t&&t.trim().length>0?{type:"plain_text",text:t}:null}}class Gt{canHandle(t){return!t.event?.clipboardData&&l.isIOS()}async getPasteIntent(t){const e=t.core.clipboardManager.sessionClipboardPayload;return e?{type:"kritzel_objects",payload:e}:{type:"unknown"}}}class qt{_core;_pasteIntentRegistry;_sessionClipboardPayload=null;_pasteOffset=0;constructor(t){this._core=t,this._pasteIntentRegistry=new Nt(this._core),this._pasteIntentRegistry.register(new Gt),this._pasteIntentRegistry.register(new Ut),this._pasteIntentRegistry.register(new Ht)}get sessionClipboardPayload(){return this._sessionClipboardPayload}serializeForClipboard(t){const e="function"==typeof t.serialize?t.serialize():t;return K.isInstanceOf(t,"KritzelGroup")&&(e.__children__=t.children.map((t=>this.serializeForClipboard(t)))),e}serializeClipboardPayload(t){return`${Kt}${JSON.stringify(t)}`}async writeBrowserClipboardPayload(t,e){const i=this.serializeClipboardPayload(t);if(e?.clipboardData)e.clipboardData.setData("text/plain",i);else if("undefined"!=typeof navigator&&navigator.clipboard?.writeText)try{await navigator.clipboard.writeText(i)}catch{}}reviveClipboardObject(t){const e=new _t(this._core),{__children__:i,...n}=t,r=e.revive(n);if(!r)return null;if(i&&K.isInstanceOf(r,"KritzelGroup")){const t=i.map((t=>this.reviveClipboardObject(t))).filter((t=>null!=t));r._pendingChildren=t,r.childIds=t.map((t=>t.id))}return r}regenerateIdsAndRemapAnchors(t){const e=[],i=t.length>0&&t.every((t=>K.isInstanceOf(t,"KritzelLine"))),n=t=>{for(const i of t)e.push(i),K.isInstanceOf(i,"KritzelGroup")&&n(i._pendingChildren)};n(t);const r=new Map;for(const t of e){const e=t.generateId();r.set(t.id,e),t.id=e,t.isMounted=!1}for(const t of e)K.isInstanceOf(t,"KritzelGroup")&&(t.childIds=t.childIds.map((t=>r.get(t)??t))),K.isInstanceOf(t,"KritzelLine")&&(t.startAnchor&&r.has(t.startAnchor.objectId)?t.startAnchor={objectId:r.get(t.startAnchor.objectId)}:i&&(t.startAnchor=void 0),t.endAnchor&&r.has(t.endAnchor.objectId)?t.endAnchor={objectId:r.get(t.endAnchor.objectId)}:i&&(t.endAnchor=void 0))}copy(t){const e=this._core.store.selectionGroup;if(!e)return;const i={version:1,sourceWorkspaceId:this._core.store.state.activeWorkspace?.id,objects:e.objects.sort(((t,e)=>t.zIndex-e.zIndex)).map((t=>this.serializeForClipboard(t)))};this._pasteOffset=0,this._sessionClipboardPayload=i,this.writeBrowserClipboardPayload(i,t)}cut(t){this._core.store.selectionGroup&&(this.copy(t),this._core.delete())}materializeKritzelObjects(t){const e=t.payload.objects.map((t=>this.reviveClipboardObject(t))).filter((t=>null!=t));return this.regenerateIdsAndRemapAnchors(e),e}async materializeImageFiles(t){try{const e=25/this._core.store.state.scale,i=t.files.map((async(t,i)=>{const n=await q(t,{maxWidthOrHeight:1200});return L.fromBlob(this._core,n,{translateX:i*e,translateY:i*e})}));return await Promise.all(i)}catch(t){return console.error("Failed to import pasted image files:",t),null}}async materializePlainText(t){const e=B.create(this._core),i=t.text.split("\n").map((t=>0===t.length?{type:"paragraph"}:{type:"paragraph",content:[{type:"text",text:t}]}));return e.setContent({type:"doc",content:i}),[e]}async paste(t,e,i){const n=await this._pasteIntentRegistry.resolve(i);let r=null;"kritzel_objects"===n.type?r=this.materializeKritzelObjects(n):"image_files"===n.type?r=await this.materializeImageFiles(n):"plain_text"===n.type&&(r=await this.materializePlainText(n)),r&&0!==r.length&&await this.insertMaterializedObjects(r,n,t,e)}async insertMaterializedObjects(t,e,i,n){const r=this._core.store.state.activeWorkspace;if(!r)return;const o=t.some((t=>t.workspaceId!==r.id))||"kritzel_objects"!==e.type,s=void 0!==i&&void 0!==n,a=Math.min(...t.map((t=>t.translateX))),l=Math.min(...t.map((t=>t.translateY)));let c,h;const u=25/this._core.store.state.scale;void 0!==i&&void 0!==n?(c=i,h=n):o?(c=a,h=l):(c=a+u+this._pasteOffset,h=l+u+this._pasteOffset,this._pasteOffset+=u);const d=c-a,f=h-l;this._core.removeSelectionGroup(),this._core.removeSelectionBox();const p=j.create(this._core),g=this._core.store.currentZIndex;this._core.store.objects.transaction((()=>{const e=(t,i)=>{if(0===t._pendingChildren.length)return;const n=t._pendingChildren;t._pendingChildren=[],n.forEach(((t,n)=>{t.workspaceId!==r.id&&(t.workspaceId=r.id),t.updatePosition(t.translateX+d,t.translateY+f),t.zIndex=i+n+1,K.isInstanceOf(t,"KritzelGroup")&&e(t,t.zIndex),this._core.addObject(t)})),t.finalize()},i=[];t.forEach(((t,n)=>{t.workspaceId!==r.id&&(t.workspaceId=r.id),t.updatePosition(t.translateX+d,t.translateY+f),t.zIndex=g+n,K.isInstanceOf(t,"KritzelGroup")&&e(t,t.zIndex),this._core.addObject(t),i.push(t),p.addOrRemove(t)})),this._core.engine.emitObjectsAdded(i)})),this._core.anchorManager.rebuildIndex(),p.isSelected=!0,1===t.length&&(p.rotation=t[0].rotation),o&&!s&&p.centerInViewport(),this._core.addSelectionGroup(p),this._core.engine.viewport?.bringIntoViewIfNeeded(p),this._core.store.state.isSelecting=!1,await new Promise((t=>{requestAnimationFrame((()=>requestAnimationFrame((()=>t()))))})),p.refreshObjectDimensions(),o&&!s&&p.centerInViewport(),this._core.engine.emitObjectsChange(),this._core.rerender(),this._core.store.setState("activeTool",this._core.toolRegistry.getTool("selection")),this._core.engine.emitObjectsChange(),this._core.rerender()}}class Yt{_kritzelEngine;_store;_syncConfig;_assetStorageConfig;_assetResolver;_appStateMap;_anchorManager;_cursorManager;_themeManager;_localizationManager;_licenseManager;_permissionManager;_clipboardManager;_toolRegistry;_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 localizationManager(){return this._localizationManager}get licenseManager(){return this._licenseManager}get permissionManager(){return this._permissionManager}get toolRegistry(){return this._toolRegistry}get clipboardManager(){return this._clipboardManager}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 Pt(Ot),this._appStateMap=new Bt,this._anchorManager=new Y(this),this._cursorManager=new Wt(this),this._themeManager=new Z(this),this._localizationManager=new X(this),this._licenseManager=new J(this),this._permissionManager=new Vt(this),this._clipboardManager=new qt(this),this._toolRegistry=new Ft(this),this._assetResolver=new Q,this._assetResolver.setShowInfo(this._store.state.debugInfo?.showAssetResolverInfo??!1)}get assetResolver(){return this._assetResolver}setSyncConfig(t){this._syncConfig=t}setAssetStorageConfig(t){this._assetStorageConfig=t}setEditorId(t){this._editorId=t,this._themeManager=new Z(this),this._localizationManager=new X(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(),n=!t&&!!this._editorId,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,o=localStorage.getItem(this.getStorageKey("kritzel-active-workspace-id")),s=o?i.find((t=>t.id===o)):null;let a;if(t)a=t,i.find((e=>e.id===t.id))||(a._core=this,this.saveWorkspaceToAppState(a));else if(s)a=s;else if(r&&!n)a=r;else{if(e?.skipFallbackCreation)return this._store.state.workspaces=i,this._store.state.activeWorkspace=null,void this.rerender();a=new D(I.generateUUID(),"New Workspace"),a._core=this,this.saveWorkspaceToAppState(a)}localStorage.setItem(this.getStorageKey("kritzel-active-workspace-id"),a.id),this._store.objects&&this._store.objects.isReady&&this._store.objects.destroy();const l=new Lt;this._store.state.objects=l,this._store.state.activeWorkspace=a,this._store.state.workspaces=this.loadWorkspacesFromAppState();const c=a.viewport??{centerWorldX:0,centerWorldY:0,scale:1},h=c.scale??1,u=this._store.state.viewportHeight;this._store.state.translateX=this._store.state.viewportWidth/2-(c.centerWorldX??0)*h,this._store.state.translateY=u/2-(c.centerWorldY??0)*h,this._store.state.scale=h,await l.initialize(this,a.id,this._syncConfig),this._user&&l.setLocalUser(this._user),l.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 D(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 j||t instanceof A))).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 n=this._store.state.activeWorkspace;n&&this._store.state.workspaces.some((t=>t.id===n.id))&&(n.viewport={centerWorldX:(this._store.state.viewportWidth/2-t)/i,centerWorldY:(this._store.state.viewportHeight/2-e)/i,scale:i},n.updatedAt=new Date,this.saveWorkspaceToAppState(n))}getIsPublic(){return this._store.state.activeWorkspace?.isPublic??!1}addObject(t){this._store.objects.insert(t)}removeObject(t,e=!1){K.isInstanceOf(t,"KritzelGroup")&&!e&&[...t.children].forEach((t=>{this.removeObject(t)})),K.isInstanceOf(t,"KritzelCustomElement")&&t.unmount(),K.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 n in e)if(e.hasOwnProperty(n)){const r=e[n];void 0!==r&&(t[n]=r,i.push(n))}t.onAfterUpdate(i),this._store.objects.update(t)}addSelectionGroup(t){this.removeLocalSelectionGroups(),this.removeSelectionBox();for(const e of t.objects??[])if(K.isInstanceOf(e,"KritzelCustomElement")){const t=e;"function"==typeof t.setIsInteractive?t.setIsInteractive(!0):t.isInteractive=!0}this._store.objects.insert(t),this._store.setSelectionGroup(t),this._kritzelEngine.triggerSelectionChange()}isLocalSelectionGroup(t){const e=this._user?.id;return null==e||t.userId===e||null==t.userId}teardownSelectionGroup(t){t.deselectAllChildren?.();for(const e of t.objects??[])if(K.isInstanceOf(e,"KritzelCustomElement")){const t=e;"function"==typeof t.setIsInteractive?t.setIsInteractive(!1):t.isInteractive=!1}}removeLocalSelectionGroups(){const t=this._store.objects.allObjects().filter((t=>t instanceof j||K.isInstanceOf(t,"KritzelSelectionGroup"))).filter((t=>this.isLocalSelectionGroup(t))),e=this._store.selectionGroup;if(e&&this.isLocalSelectionGroup(e)&&!t.some((t=>t.id===e.id))&&t.push(e),0===t.length)return!1;for(const e of t)this.teardownSelectionGroup(e);const i=new Set(t.map((t=>t.id)));return this._store.objects.remove((t=>i.has(t.id))),this._store.setSelectionGroup(null),!0}removeSelectionGroup(){this.removeLocalSelectionGroups()&&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())}bringForward(t){const e=this._store.selectionGroup,i=t?[t]:e?.objects||[],n=this._store.allNonSelectionObjects.filter((t=>-1===i.findIndex((e=>e.id===t.id)))),r=n.length>0?Math.max(...n.map((t=>t.zIndex)))+1:0;i.forEach((t=>{t.zIndex!==r&&this.updateObject(t,{zIndex:t.zIndex+1})})),this.rerender()}sendBackward(t){const e=this._store.selectionGroup,i=t?[t]:e?.objects||[],n=this._store.allNonSelectionObjects.filter((t=>-1===i.findIndex((e=>e.id===t.id)))),r=n.length>0?Math.min(...n.map((t=>t.zIndex)))-1:0;i.forEach((t=>{t.zIndex!==r&&this.updateObject(t,{zIndex:t.zIndex-1})})),this.rerender()}bringToFront(t){const e=this._store.selectionGroup,i=t?[t]:e?.objects||[],n=this._store.allNonSelectionObjects.filter((t=>-1===i.findIndex((e=>e.id===t.id)))),r=Math.max(...n.map((t=>t.zIndex)))+1;i.forEach((t=>{this.updateObject(t,{zIndex:r})})),this.rerender()}sendToBack(t){const e=this._store.selectionGroup,i=t?[t]:e?.objects||[],n=this._store.allNonSelectionObjects.filter((t=>-1===i.findIndex((e=>e.id===t.id)))),r=Math.min(...n.map((t=>t.zIndex)))-1;i.forEach((t=>{this.updateObject(t,{zIndex:r})})),this.rerender()}alignObjects(t){const e=this._store.selectionGroup;if(!e||e.objects.length<2)return;const i=e.objects,n=Dt.calculateAlignedPositions(i,t);this._store.objects.transaction((()=>{for(const t of i){const e=n.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=F.createFromObjects(this,t.objects);this.addObject(e),this.removeSelectionGroup();const i=j.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=>K.isInstanceOf(t,"KritzelGroup")));if(0===e.length)return;const i=[],n=t.objects.filter((t=>!K.isInstanceOf(t,"KritzelGroup")));e.forEach((t=>{const e=t.ungroup();i.push(...e),this.removeObject(t,!0)})),this.removeSelectionGroup();const r=j.create(this);[...i,...n].forEach((t=>{r.addOrRemove(t)})),r.isSelected=!0,this.addSelectionGroup(r),this.engine.emitObjectsChange(),this.rerender()}selectObjects(t){if(0===t.length)return;const e=j.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 j||t instanceof A||t instanceof dt)));if(t.length>0){const e=j.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",this._toolRegistry.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 j||t instanceof A||t instanceof dt)));if(t.length>0){const e=j.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",this._toolRegistry.getTool("selection")),this.rerender()}}clearSelection(){this.removeSelectionGroup();const t=this._user?.id;this._store.objects.remove((e=>e instanceof A||e instanceof j&&(null==t||e.userId===t||null==e.userId))),this._store.setSelectionBox(null),this._store.setSelectionGroup(null);for(const t of this._store.allNonSelectionObjects)t.isSelected&&(t.isSelected=!1);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 n=t.clientX,r=t.clientY,o=i.elementFromPoint(n,r);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(n,r)?t:null}return null}getObjectsFromPointerEvent(t,e=".object"){const i=this._store.state.host?.shadowRoot;if(!i)return[];const n=i.elementsFromPoint(t.clientX,t.clientY);if(!n||0===n.length)return[];const r=new Set;return n.forEach((t=>{const i=t.closest(e);i&&i.id&&r.add(i.id)})),r.size>0?this._store.allObjects.filter((t=>r.has(t.id))).sort(((t,e)=>e.zIndex-t.zIndex)):[]}getElementsAtPoint(t,e){const i=this._store.state.host?.shadowRoot;if(!i)return[];const n=i.elementsFromPoint(t.clientX,t.clientY);return n&&0!==n.length?n.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",this._toolRegistry.getTool("selection"))}displaySelectionGroupUI(t){if(!t.isSelected)return!1;if(t instanceof j&&null!=this._user?.id&&null!=t.userId&&t.userId!==this._user.id)return!0;const e=this._store.selectionGroup;return e?t instanceof j&&t.id===e.id&&(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 Zt{static calculateCombinedBounds(t){if(!t||0===t.length)return null;let e=1/0,i=1/0,n=-1/0,r=-1/0;for(const o of t){const t=o.rotatedBoundingBox;e=Math.min(e,t.x),i=Math.min(i,t.y),n=Math.max(n,t.x+t.width),r=Math.max(r,t.y+t.height)}return{x:e,y:i,z:1,width:n-e,height:r-i}}static generateSvg(t,e={}){const{theme:i,padding:n=0,includeXmlDeclaration:r=!0,rasterSafeForCanvas:o=!1,imageDataUrls:s}=e;if(!t||0===t.length)return"";const a=this.flattenObjects(t),l=this.calculateCombinedBounds(a);if(!l)return"";const c=l.x-n,h=l.y-n,u=l.width+2*n,d=l.height+2*n,f=this.collectDefs(a,i),p=t.sort(((t,e)=>t.zIndex-e.zIndex)).map((t=>this.objectToSvgElement(t,i,s,o))).filter(Boolean).join("\n ");return`${r?'<?xml version="1.0" encoding="UTF-8"?>\n':""}<svg xmlns="http://www.w3.org/2000/svg" viewBox="${c} ${h} ${u} ${d}" width="${u}" height="${d}">${f.length>0?`\n <defs>\n ${f.join("\n ")}\n </defs>`:""}\n ${p}\n</svg>`}static flattenObjects(t){const e=[];for(const i of t)K.isInstanceOf(i,"KritzelGroup")?e.push(...this.flattenObjects(i.children)):e.push(i);return e}static async resolveImageDataUrls(t,e){const i=new Map;if(!t||0===t.length)return i;const n=this.flattenObjects(t).filter((t=>K.isInstanceOf(t,"KritzelImage")));return await Promise.all(n.map((async t=>{if(t.src?.startsWith("data:"))i.set(t.id,t.src);else if(t.resolvedSrc?.startsWith("data:"))i.set(t.id,t.resolvedSrc);else if(t.assetId&&e)try{const n=await e.fetchBlob(t.assetId);i.set(t.id,await this.blobToDataUrl(n))}catch(e){console.warn(`[KritzelSvgExportHelper] Failed to inline image asset ${t.assetId} for export:`,e)}}))),i}static async blobToDataUrl(t){if("undefined"!=typeof FileReader)try{return await new Promise(((e,i)=>{const n=new FileReader;n.onload=()=>{"string"!=typeof n.result?i(new Error("FileReader result is not a string")):e(n.result)},n.onerror=()=>i(n.error??new Error("Failed to read blob as data URL")),n.readAsDataURL(t)}))}catch{}const e=new Uint8Array(await t.arrayBuffer());return`data:${t.type||"application/octet-stream"};base64,${this.uint8ToBase64(e)}`}static uint8ToBase64(t){if("undefined"!=typeof Buffer)return Buffer.from(t).toString("base64");let e="";for(let i=0;i<t.length;i+=32768){const n=t.subarray(i,Math.min(i+32768,t.length));e+=String.fromCharCode(...n)}if("function"==typeof btoa)return btoa(e);throw new Error("No base64 encoder available in this runtime")}static collectDefs(t,e){const i=[];for(const n of t)K.isInstanceOf(n,"KritzelLine")&&(n.hasStartArrow&&i.push(this.generateArrowMarker(n,"start",e)),n.hasEndArrow&&i.push(this.generateArrowMarker(n,"end",e)));return i}static generateArrowMarker(t,e,i){const n="start"===e?t.startMarkerId:t.endMarkerId,r=t.getArrowSize(e),o=t.getArrowFill(e);return`<marker id="${n}" markerWidth="${r}" markerHeight="${r}" refX="0" refY="${r/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(${r/10})"/>\n </marker>`}static objectToSvgElement(t,e,i,n=!1){return K.isInstanceOf(t,"KritzelPath")?this.pathToSvg(t,e):K.isInstanceOf(t,"KritzelLine")?this.lineToSvg(t,e):K.isInstanceOf(t,"KritzelShape")?this.shapeToSvg(t,e):K.isInstanceOf(t,"KritzelText")?this.textToSvg(t,e,n):K.isInstanceOf(t,"KritzelImage")?this.imageToSvg(t,i):K.isInstanceOf(t,"KritzelCustomElement")?this.customElementToSvg(t,n):K.isInstanceOf(t,"KritzelGroup")?this.groupToSvg(t,e,i,n):""}static pathToSvg(t,e){const i=this.buildTransform(t),n=a.resolveThemeColor(t.fill,e),r=a.resolveThemeColor(t.stroke,e),o=1!==t.opacity?` opacity="${t.opacity}"`:"",s=this.getObjectScale(t);return`<g transform="${i}"${o}>\n <svg viewBox="${t.viewBox}" width="${t.totalWidth/s}" height="${t.totalHeight/s}" overflow="visible">\n <path d="${t.d}" fill="${n||"none"}" stroke="${r||"none"}"${t.strokeWidth?` stroke-width="${t.strokeWidth}"`:""}/>\n </svg>\n </g>`}static lineToSvg(t,e){const i=this.buildTransform(t),n=a.resolveThemeColor(t.stroke,e),r=1!==t.opacity?` opacity="${t.opacity}"`:"",o=this.getObjectScale(t);return`<g transform="${i}"${r}>\n <svg viewBox="${t.viewBox}" width="${t.totalWidth/o}" height="${t.totalHeight/o}" overflow="visible">\n <path d="${t.d}" fill="none" stroke="${n}" 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),n=a.resolveThemeColor(t.fillColor,e),r=a.resolveThemeColor(t.strokeColor,e),o=1!==t.opacity?` opacity="${t.opacity}"`:"",s=this.getObjectScale(t),l=t.getSvgPath();let c="";if(t.editor&&!t.editor.state.doc.textContent.trim());else if(t.content){const i=this.prosemirrorToHtml(t.content,t,e);if(i){const n=a.resolveThemeColor(t.fontColor,e);c=`\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: ${n}; overflow: hidden;">\n ${i}\n </div>\n </foreignObject>`}}return`<g transform="${i}"${o}>\n <svg viewBox="${t.viewBox}" width="${t.totalWidth/s}" height="${t.totalHeight/s}" overflow="visible" preserveAspectRatio="none">\n <path d="${l}" fill="${n||"transparent"}" stroke="${r}" stroke-width="${t.strokeWidth}"/>${c}\n </svg>\n </g>`}static textToSvg(t,e,i=!1){if(i)return this.textToSvgRasterSafe(t,e);const n=this.buildTransform(t),r=1!==t.opacity?` opacity="${t.opacity}"`:"",o=a.resolveThemeColor(t.fontColor,e),s=a.resolveThemeColor(t.backgroundColor,e),l=this.getObjectScale(t),c=this.prosemirrorToHtml(t.content,t,e);return`<g transform="${n}"${r}>\n <foreignObject x="0" y="0" width="${t.totalWidth/l}" height="${t.totalHeight/l}">\n <div xmlns="http://www.w3.org/1999/xhtml" style="font-family: ${t.fontFamily}; font-size: ${t.fontSize}pt; color: ${o}; background-color: ${s||"transparent"}; transform: scale(${t.scaleFactor}); transform-origin: top left; white-space: pre-wrap; word-wrap: break-word;">\n ${c}\n </div>\n </foreignObject>\n </g>`}static textToSvgRasterSafe(t,e){const i=this.buildTransform(t),n=1!==t.opacity?` opacity="${t.opacity}"`:"",r=a.resolveThemeColor(t.fontColor,e),o=a.resolveThemeColor(t.backgroundColor,e),s=this.getObjectScale(t),l=t.totalWidth/s,c=t.totalHeight/s,h=this.prosemirrorToPlainTextLines(t.content),u=h.length>0?h:[""],d=Math.max(1,t.fontSize*(t.scaleFactor||1)),f=1.2*d,p=d,g=o&&"transparent"!==o?`<rect x="0" y="0" width="${l}" height="${c}" fill="${o}"/>`:"",b=u.map(((t,e)=>`<tspan x="0" y="${p+e*f}" xml:space="preserve">${this.escapeHtml(t)}</tspan>`)).join("");return`<g transform="${i}"${n}>\n ${g}\n <text font-family="${this.escapeHtml(t.fontFamily)}" font-size="${d}" fill="${r}">${b}</text>\n </g>`}static imageToSvg(t,e){const i=this.buildTransform(t),n=1!==t.opacity?` opacity="${t.opacity}"`:"",r=this.getObjectScale(t),o=t.totalWidth/r,s=t.totalHeight/r;return`<g transform="${i}"${n}>\n <image href="${e?.get(t.id)||t.resolvedSrc||t.src||""}" x="0" y="0" width="${o}" height="${s}" preserveAspectRatio="xMidYMid meet"/>\n </g>`}static customElementToSvg(t,e=!1){const i=this.buildTransform(t),n=1!==t.opacity?` opacity="${t.opacity}"`:"",r=this.getObjectScale(t),o=t.totalWidth/r,s=t.totalHeight/r;return e?(console.warn("[KritzelCustomElement SVG Export] Custom elements do not serialize well to PNG. Use SVG export or screenshot instead."),`<g transform="${i}"${n}>\n <rect x="0" y="0" width="${o}" height="${s}" fill="#f0f0f0" stroke="#999" stroke-width="1" />\n <text x="${o/2}" y="${s/2}" text-anchor="middle" dominant-baseline="middle" font-size="12" fill="#999">[Custom Element]</text>\n </g>`):`<g transform="${i}"${n}>\n <foreignObject x="0" y="0" width="${o}" height="${s}">\n <div xmlns="http://www.w3.org/1999/xhtml" style="width:100%;height:100%;overflow:hidden;">\n ${t.element?.outerHTML||'<div style="border:1px dashed #ccc">Empty</div>'}\n </div>\n </foreignObject>\n </g>`}static groupToSvg(t,e,i,n=!1){const r=t.children.sort(((t,e)=>t.zIndex-e.zIndex)).map((t=>this.objectToSvgElement(t,e,i,n))).filter(Boolean).join("\n ");return r?`<g${1!==t.opacity?` opacity="${t.opacity}"`:""}>\n ${r}\n </g>`:""}static buildTransform(t){const e=[],i=this.getObjectScale(t);if(e.push(`translate(${t.translateX}, ${t.translateY})`),0!==t.rotation){const n=t.rotation*(180/Math.PI);e.push(`rotate(${n}, ${t.totalWidth/2/i}, ${t.totalHeight/2/i})`)}return e.join(" ")}static getObjectScale(t){const e=t.scale??1;return 0===e?1:e}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 n of t.marks)i=this.applyMark(i,n,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 prosemirrorToPlainTextLines(t){if(!t||!Array.isArray(t.content))return[];const e=t.content.map((t=>this.nodeToPlainText(t))).join("").replace(/\r\n/g,"\n").replace(/\n+$/,"");return e?e.split("\n"):[]}static nodeToPlainText(t){if(!t)return"";switch(t.type){case"text":return t.text||"";case"hard_break":return"\n";case"paragraph":return`${Array.isArray(t.content)?t.content.map((t=>this.nodeToPlainText(t))).join(""):""}\n`;case"list_item":return`- ${(Array.isArray(t.content)?t.content.map((t=>this.nodeToPlainText(t))).join(""):"").trim()}\n`;default:return Array.isArray(t.content)?t.content.map((t=>this.nodeToPlainText(t))).join(""):""}}static applyMark(t,e,i){switch(e.type){case"bold":case"strong":return`<strong>${t}</strong>`;case"italic":case"em":return`<em>${t}</em>`;case"underline":return`<u>${t}</u>`;case"strike":return`<s>${t}</s>`;case"code":return`<code>${t}</code>`;case"link":return`<a href="${this.escapeHtml(e.attrs?.href||"#")}">${t}</a>`;default:return t}}static escapeHtml(t){return t.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}}const Xt=(()=>{let t=0;return()=>(t+=1,`u${`0000${(Math.random()*36**4|0).toString(36)}`.slice(-4)}${t}`)})();function Jt(t){const e=[];for(let i=0,n=t.length;i<n;i++)e.push(t[i]);return e}let Qt=null;function te(t={}){return Qt||(t.includeStyleProperties?(Qt=t.includeStyleProperties,Qt):(Qt=Jt(window.getComputedStyle(document.documentElement)),Qt))}function ee(t,e){const i=(t.ownerDocument.defaultView||window).getComputedStyle(t).getPropertyValue(e);return i?parseFloat(i.replace("px","")):0}function ie(t,e={}){return{width:e.width||function(t){const e=ee(t,"border-left-width"),i=ee(t,"border-right-width");return t.clientWidth+e+i}(t),height:e.height||function(t){const e=ee(t,"border-top-width"),i=ee(t,"border-bottom-width");return t.clientHeight+e+i}(t)}}const ne=16384;function re(t){return new Promise(((e,i)=>{const n=new Image;n.onload=()=>{n.decode().then((()=>{requestAnimationFrame((()=>e(n)))}))},n.onerror=i,n.crossOrigin="anonymous",n.decoding="async",n.src=t}))}const oe=(t,e)=>{if(t instanceof e)return!0;const i=Object.getPrototypeOf(t);return null!==i&&(i.constructor.name===e.name||oe(i,e))};function se(t,e,i,n){const r=window.getComputedStyle(t,i),o=r.getPropertyValue("content");if(""===o||"none"===o)return;const s=Xt();try{e.className=`${e.className} ${s}`}catch(t){return}const a=document.createElement("style");a.appendChild(function(t,e,i,n){const r=`.${t}:${e}`,o=i.cssText?function(t){const e=t.getPropertyValue("content");return`${t.cssText} content: '${e.replace(/'|"/g,"")}';`}(i):function(t,e){return te(e).map((e=>`${e}: ${t.getPropertyValue(e)}${t.getPropertyPriority(e)?" !important":""};`)).join(" ")}(i,n);return document.createTextNode(`${r}{${o}}`)}(s,i,r,n)),e.appendChild(a)}const ae="application/font-woff",le="image/jpeg",ce={woff:ae,woff2:ae,ttf:"application/font-truetype",eot:"application/vnd.ms-fontobject",png:"image/png",jpg:le,jpeg:le,gif:"image/gif",tiff:"image/tiff",svg:"image/svg+xml",webp:"image/webp"};function he(t){const e=function(t){const e=/\.([^./]*?)$/g.exec(t);return e?e[1]:""}(t).toLowerCase();return ce[e]||""}function ue(t){return-1!==t.search(/^(data:)/)}async function de(t,e,i){const n=await fetch(t,e);if(404===n.status)throw new Error(`Resource "${n.url}" not found`);const r=await n.blob();return new Promise(((t,e)=>{const o=new FileReader;o.onerror=e,o.onloadend=()=>{try{t(i({res:n,result:o.result}))}catch(t){e(t)}},o.readAsDataURL(r)}))}const fe={};async function pe(t,e,i){const n=function(t,e,i){let n=t.replace(/\?.*/,"");return i&&(n=t),/ttf|otf|eot|woff2?/i.test(n)&&(n=n.replace(/.*\//,"")),e?`[${e}]${n}`:n}(t,e,i.includeQueryParams);if(null!=fe[n])return fe[n];let r;i.cacheBust&&(t+=(/\?/.test(t)?"&":"?")+(new Date).getTime());try{const n=await de(t,i.fetchRequestInit,(({res:t,result:i})=>(e||(e=t.headers.get("Content-Type")||""),function(t){return t.split(/,/)[1]}(i))));r=function(t,e){return`data:${e};base64,${t}`}(n,e)}catch(e){r=i.imagePlaceholder||"";let n=`Failed to fetch resource: ${t}`;e&&(n="string"==typeof e?e:e.message),n&&console.warn(n)}return fe[n]=r,r}const ge=t=>null!=t.tagName&&"SLOT"===t.tagName.toUpperCase(),be=t=>null!=t.tagName&&"SVG"===t.tagName.toUpperCase();async function ve(t,e,i){return i||!e.filter||e.filter(t)?Promise.resolve(t).then((t=>async function(t,e){return oe(t,HTMLCanvasElement)?async function(t){const e=t.toDataURL();return"data:,"===e?t.cloneNode(!1):re(e)}(t):oe(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),re(e.toDataURL())}const i=t.poster,n=he(i);return re(await pe(i,n,e))}(t,e):oe(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 ve(t.contentDocument.body,e,!0)}catch(t){}return t.cloneNode(!1)}(t,e):t.cloneNode(be(t))}(t,e))).then((i=>async function(t,e,i){var n,r;if(be(e))return e;let o=[];return o=ge(t)&&t.assignedNodes?Jt(t.assignedNodes()):oe(t,HTMLIFrameElement)&&(null===(n=t.contentDocument)||void 0===n?void 0:n.body)?Jt(t.contentDocument.body.childNodes):Jt((null!==(r=t.shadowRoot)&&void 0!==r?r:t).childNodes),0===o.length||oe(t,HTMLVideoElement)||await o.reduce(((t,n)=>t.then((()=>ve(n,i))).then((t=>{t&&e.appendChild(t)}))),Promise.resolve()),e}(t,i,e))).then((i=>function(t,e,i){return oe(e,Element)&&(function(t,e,i){const n=e.style;if(!n)return;const r=window.getComputedStyle(t);r.cssText?(n.cssText=r.cssText,n.transformOrigin=r.transformOrigin):te(i).forEach((i=>{let o=r.getPropertyValue(i);if("font-size"===i&&o.endsWith("px")){const t=Math.floor(parseFloat(o.substring(0,o.length-2)))-.1;o=`${t}px`}oe(t,HTMLIFrameElement)&&"display"===i&&"inline"===o&&(o="block"),"d"===i&&e.getAttribute("d")&&(o=`path(${e.getAttribute("d")})`),n.setProperty(i,o,r.getPropertyPriority(i))}))}(t,e,i),function(t,e,i){se(t,e,":before",i),se(t,e,":after",i)}(t,e,i),function(t,e){oe(t,HTMLTextAreaElement)&&(e.innerHTML=t.value),oe(t,HTMLInputElement)&&e.setAttribute("value",t.value)}(t,e),function(t,e){if(oe(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 n={};for(let r=0;r<i.length;r++){const o=i[r].getAttribute("xlink:href");if(o){const i=t.querySelector(o),r=document.querySelector(o);i||!r||n[o]||(n[o]=await ve(r,e,!0))}}const r=Object.values(n);if(r.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 n=document.createElementNS(e,"defs");i.appendChild(n);for(let t=0;t<r.length;t++)n.appendChild(r[t]);t.appendChild(i)}return t}(t,e))):null}const me=/url\((['"]?)([^'"]+?)\1\)/g,ke=/url\([^)]+\)\s*format\((["']?)([^"']+)\1\)/g,ye=/src:\s*(?:url\([^)]+\)\s*format\([^)]+\)[,;]\s*)+/g;function we(t){return-1!==t.search(me)}async function xe(t,e,i){if(!we(t))return t;const n=function(t,{preferredFontFormat:e}){return e?t.replace(ye,(t=>{for(;;){const[i,,n]=ke.exec(t)||[];if(!n)return"";if(n===e)return`src: ${i};`}})):t}(t,i),r=function(t){const e=[];return t.replace(me,((t,i,n)=>(e.push(n),t))),e.filter((t=>!ue(t)))}(n);return r.reduce(((t,n)=>t.then((t=>async function(t,e,i,n){try{const r=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(),n=i.createElement("base"),r=i.createElement("a");return i.head.appendChild(n),i.body.appendChild(r),e&&(n.href=e),r.href=t,r.href}(e,i):e,o=he(e);let s;return s=await pe(r,o,n),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,n,e,i)))),Promise.resolve(n))}async function ze(t,e,i){var n;const r=null===(n=e.style)||void 0===n?void 0:n.getPropertyValue(t);if(r){const n=await xe(r,null,i);return e.style.setProperty(t,n,e.style.getPropertyPriority(t)),!0}return!1}async function Ce(t,e){oe(t,Element)&&(await async function(t,e){await ze("background",t,e)||await ze("background-image",t,e),await ze("mask",t,e)||await ze("-webkit-mask",t,e)||await ze("mask-image",t,e)||await ze("-webkit-mask-image",t,e)}(t,e),await async function(t,e){const i=oe(t,HTMLImageElement);if((!i||ue(t.src))&&(!oe(t,SVGImageElement)||ue(t.href.baseVal)))return;const n=i?t.src:t.href.baseVal,r=await pe(n,he(n),e);await new Promise(((n,o)=>{t.onload=n,t.onerror=e.onImageErrorHandler?(...t)=>{try{n(e.onImageErrorHandler(...t))}catch(t){o(t)}}:o;const s=t;s.decode&&(s.decode=n),"lazy"===s.loading&&(s.loading="eager"),i?(t.srcset="",t.src=r):t.href.baseVal=r}))}(t,e),await async function(t,e){const i=Jt(t.childNodes).map((t=>Ce(t,e)));await Promise.all(i).then((()=>t))}(t,e))}const Se={};async function Ie(t){let e=Se[t];if(null!=e)return e;const i=await fetch(t);return e={url:t,cssText:await i.text()},Se[t]=e,e}async function Me(t,e){let i=t.cssText;const n=/url\(["']?([^"')]+)["']?\)/g,r=(i.match(/url\([^)]+\)/g)||[]).map((async r=>{let o=r.replace(n,"$1");return o.startsWith("https://")||(o=new URL(o,t.url).href),de(o,e.fetchRequestInit,(({result:t})=>(i=i.replace(r,`url(${t})`),[r,t])))}));return Promise.all(r).then((()=>i))}function $e(t){if(null==t)return[];const e=[];let i=t.replace(/(\/\*[\s\S]*?\*\/)/gi,"");const n=new RegExp("((@.*?keyframes [\\s\\S]*?){([\\s\\S]*?}\\s*?)})","gi");for(;;){const t=n.exec(i);if(null===t)break;e.push(t[0])}i=i.replace(n,"");const r=/@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=r.exec(i);if(null===t){if(t=o.exec(i),null===t)break;r.lastIndex=o.lastIndex}else o.lastIndex=r.lastIndex;e.push(t[0])}return e}function Te(t){return t.trim().replace(/["']/g,"")}async function je(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=Jt(t.ownerDocument.styleSheets),n=await async function(t,e){const i=[],n=[];return t.forEach((i=>{if("cssRules"in i)try{Jt(i.cssRules||[]).forEach(((t,r)=>{if(t.type===CSSRule.IMPORT_RULE){let o=r+1;const s=Ie(t.href).then((t=>Me(t,e))).then((t=>$e(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())}));n.push(s)}}))}catch(r){const o=t.find((t=>null==t.href))||document.styleSheets[0];null!=i.href&&n.push(Ie(i.href).then((t=>Me(t,e))).then((t=>$e(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",r)}})),Promise.all(n).then((()=>(t.forEach((t=>{if("cssRules"in t)try{Jt(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=>we(t.style.getPropertyValue("src"))))}(n)}(t,e),n=function(t){const e=new Set;return function t(i){(i.style.fontFamily||getComputedStyle(i).fontFamily).split(",").forEach((t=>{e.add(Te(t))})),Array.from(i.children).forEach((e=>{e instanceof HTMLElement&&t(e)}))}(t),e}(t);return(await Promise.all(i.filter((t=>n.has(Te(t.style.fontFamily)))).map((t=>xe(t.cssText,t.parentStyleSheet?t.parentStyleSheet.href:null,e))))).join("\n")}async function Ae(t,e={}){const{width:i,height:n}=ie(t,e),r=await ve(t,e,!0);return await async function(t,e){const i=null!=e.fontEmbedCSS?e.fontEmbedCSS:e.skipFonts?null:await je(t,e);if(i){const e=document.createElement("style"),n=document.createTextNode(i);e.appendChild(n),t.firstChild?t.insertBefore(e,t.firstChild):t.appendChild(e)}}(r,e),await Ce(r,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 n=e.style;null!=n&&Object.keys(n).forEach((t=>{i[t]=n[t]}))}(r,e),await async function(t,e,i){const n="http://www.w3.org/2000/svg",r=document.createElementNS(n,"svg"),o=document.createElementNS(n,"foreignObject");return r.setAttribute("width",`${e}`),r.setAttribute("height",`${i}`),r.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"),r.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}`))}(r)}(r,i,n)}class Ee{static shouldKeepWheelInCustomElement(t,e){if(t.ctrlKey||!0!==e.isSelected)return!1;const i="function"==typeof t.composedPath?t.composedPath():[],n=this.getScrollableContainerFromEventPath(i,e);return!!n&&this.canElementConsumeWheel(n,t.deltaX,t.deltaY)}static getScrollableContainerFromEventPath(t,e){const i=[];e.element instanceof HTMLElement&&i.push(e.element),e.elementRef instanceof HTMLElement&&i.push(e.elementRef);const n=e.elmeentRef;n instanceof HTMLElement&&i.push(n);for(const e of i){const i=t.findIndex((t=>t===e));if(-1!==i)for(const e of t.slice(0,i+1))if(e instanceof HTMLElement&&this.isScrollableElement(e))return e}for(const t of i){if(this.isScrollableElement(t))return t;const e=t.firstElementChild;if(e instanceof HTMLElement&&this.isScrollableElement(e))return e}return null}static isScrollableElement(t){const e=t.scrollHeight-t.clientHeight>0,i=t.scrollWidth-t.clientWidth>0;if(!e&&!i)return!1;const n=window.getComputedStyle(t),r=n.overflowX,o=n.overflowY;return e&&"visible"!==o&&"clip"!==o||i&&"visible"!==r&&"clip"!==r}static canElementConsumeWheel(t,e,i){const n=this.canElementConsumeVerticalWheel(t,i),r=this.canElementConsumeHorizontalWheel(t,e);return n||r}static canElementConsumeVerticalWheel(t,e){if(0===e)return!1;const i=Math.max(0,t.scrollHeight-t.clientHeight);return 0!==i&&(e>0?t.scrollTop<i-1:!!(e<0)&&t.scrollTop>1)}static canElementConsumeHorizontalWheel(t,e){if(0===e)return!1;const i=Math.max(0,t.scrollWidth-t.clientWidth);return 0!==i&&(e>0?t.scrollLeft<i-1:!!(e<0)&&t.scrollLeft>1)}}const _e=class{get host(){return r(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;onGlobalContextMenuItemsChange(t){this.contextMenuHandler&&(this.contextMenuHandler.globalContextMenuItems=t??[])}objectContextMenuItems;onObjectContextMenuItemsChange(t){this.contextMenuHandler&&(this.contextMenuHandler.objectContextMenuItems=t??[])}scaleMax=wt;validateScaleMax(t){t>wt?(console.warn("scaleMax cannot be greater than 1000."),this.scaleMax=wt,this.core.store.state.scaleMax=this.scaleMax):this.core.store.state.scaleMax=t}scaleMin=xt;validateScaleMin(t){t<xt?(console.warn("scaleMin cannot be less than 0.0001."),this.scaleMin=xt,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}isObjectDistanceFadingActive=!1;onIsObjectDistanceFadingActiveChange(){this.core.rerender()}theme="light";onThemeChange(t){this.core.themeManager.setTheme(t)}licenseKey;onLicenseKeyChange(t){this.core.licenseManager.validate(t)}themes;onThemesChange(t){t&&t.length>0&&(this.core.themeManager.registerThemes(t),this.core.themeManager.applyTheme(this.core.themeManager.currentTheme))}locale="en";onLocaleChange(t){this.core.localizationManager.setLocale(t)}locales;onLocalesChange(t){t&&t.length>0&&(this.core.localizationManager.registerLocales(t),this.core.localizationManager.setLocale(this.locale))}fallbackLocale="en";onFallbackLocaleChange(t){this.core.localizationManager.setFallbackLocale(t),this.core.rerender()}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,this.core.assetResolver.setShowInfo(t.showAssetResolverInfo))}isPanningEnabled=!0;isZoomingEnabled=!0;isLoading=!1;onIsLoadingChange(){this.syncLoadingState()}isEngineReady;activeToolChange;objectsSelectionChange;workspacesChange;activeWorkspaceChange;longpress;objectsChange;objectsAdded;objectsRemoved;objectsUpdated;undoStateChange;objectsInViewportChange;viewportChange;awarenessChange;notificationsChange;loadingChange;forceUpdate=0;isContentHidden=!0;async triggerSelectionChange(){this.objectsSelectionChange.emit()}handleWheel(t){if(this.core.store.isDisabled)return;this.core.store.state.isContextMenuVisible&&this.hideContextMenu();const e=this.core.getObjectFromPointerEvent(t);e&&I.isClass(e,"KritzelCustomElement")&&Ee.shouldKeepWheelInCustomElement(t,e)||(t.ctrlKey?this.isZoomingEnabled&&this.viewport.handleWheel(t):this.isPanningEnabled&&this.viewport.handleWheel(t),this.core.store.state?.activeTool?.handleWheel(t))}handlePointerDown(t){this.core.store.isDisabled||this.isEmbeddedCustomElementInteraction(t)||(l.isTouchDevice()&&tt.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=Tt.throttle((t=>{this.viewport.handlePointerMove(t),this.core.store.state?.activeTool?.handlePointerMove(t)}),16);handlePointerMove(t){this.core.store.isDisabled||t.buttons>0&&!this.core.store.state.pointers.has(t.pointerId)||(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))}isEmbeddedCustomElementInteraction(t){const e=t.composedPath(),i=e.find((t=>t instanceof HTMLElement&&t.classList.contains("object")));if(!i?.id)return!1;const n=this.core.store.objects.findById(i.id);if(!n||!K.isInstanceOf(n,"KritzelCustomElement"))return!1;if(!this.core.store.selectionGroup?.objects?.some((t=>t.id===n.id)))return!1;if(!0!==n.isInteractive)return!1;const r=[];return n.element instanceof HTMLElement&&r.push(n.element),n.elementRef instanceof HTMLElement&&r.push(n.elementRef),0!==r.length&&r.some((t=>this.isNativeInteractiveEmbeddedTarget(e,t)))}isNativeInteractiveEmbeddedTarget(t,e){const i=t.findIndex((t=>t===e));if(-1===i)return!1;for(const e of t.slice(0,i))if(e instanceof HTMLElement&&e.matches('input, button, textarea, select, a[href], [contenteditable="true"], [contenteditable=""]'))return!0;return!1}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.shouldHandleGlobalShortcutEvent(t)&&this.keyHandler.handleKeyDown(t)}handleKeyUp(t){!this.core.store.isDisabled&&this.shouldHandleGlobalShortcutEvent(t)&&this.keyHandler.handleKeyUp(t)}handleCopy(t){!this.core.store.isDisabled&&this.shouldHandleGlobalShortcutEvent(t)&&(!this.core.store.selectionGroup||this.core.store.activeText||this.core.store.activeShape||(t.cancelable&&t.preventDefault(),this.core.clipboardManager.copy(t),this.core.rerender()))}handleCut(t){!this.core.store.isDisabled&&this.shouldHandleGlobalShortcutEvent(t)&&(!this.core.store.selectionGroup||this.core.store.activeText||this.core.store.activeShape||(t.cancelable&&t.preventDefault(),this.core.clipboardManager.cut(t)))}handlePaste(t){!this.core.store.isDisabled&&this.shouldHandleGlobalShortcutEvent(t)&&(this.core.store.activeText||this.core.store.activeShape||(t.cancelable&&t.preventDefault(),this.core.clipboardManager.paste(void 0,void 0,t)))}shouldHandleGlobalShortcutEvent(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=e[0];return!(i instanceof HTMLElement&&i.matches?.('input, textarea, select, [contenteditable="true"], [contenteditable=""]'))}preventDoubleTapZoomOnTouchDevices(t){t.cancelable&&t.preventDefault()}async registerTool(t,e,i){if("function"!=typeof e)return console.error(`Failed to register tool "${t}": Tool class must be a constructor function`),null;if(this.core.toolRegistry.hasTool(t)){const e=this.core.toolRegistry.getTool(t);return i&&this.applyToolConfig(e,i),e}const n=this.core.toolRegistry.registerTool(t,e);return i&&this.applyToolConfig(n,i),Promise.resolve(n)}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 changeActiveToolByName(t){const e=this.core.toolRegistry.getTool(t);e?await this.changeActiveTool(e):console.warn(`[KritzelEngine] No tool registered with name: ${t}`)}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.clipboardManager.copy()}async cut(){this.core.clipboardManager.cut()}async paste(t,e){"granted"===await this.core.permissionManager.requestPermission("clipboard-read")?this.core.clipboardManager.paste(t,e):this.notificationsChange.emit({type:"error",message:"Clipboard read permission is required to paste content. Please grant permission and try again.",id:I.generateUUID()})}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 A)),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 openContextMenu(t){this.contextMenuHandler.open(t)}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=t.scale??this.core.store.state.scale,t.zIndex=this.core.store.currentZIndex,t.workspaceId=this.core.store.state.activeWorkspace.id,K.isInstanceOf(t,"KritzelImage")&&await t.prepareForInsert(),K.isInstanceOf(t,"KritzelText")){const e=t.content;t.editor=t.createEditor(),e&&t.setContent(e)}if(K.isInstanceOf(t,"KritzelGroup")&&t._pendingChildren.length>0){const e=new Map,i=[],n=t=>{if(0===t._pendingChildren.length)return;const r=t._pendingChildren;t._pendingChildren=[],t.childIds=[],r.forEach((r=>{const o=r.id;r.id=r.generateId(),r._core=this.core,r.scale=r.scale??this.core.store.state.scale,r.zIndex=this.core.store.currentZIndex,r.workspaceId=this.core.store.state.activeWorkspace.id,e.set(o,r.id),t.childIds.push(r.id),i.push(r),K.isInstanceOf(r,"KritzelGroup")&&n(r)}))};n(t),i.forEach((t=>{K.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.emitObjectsChange(),this.emitObjectsAdded([t]),t}async addObjects(t){if(0===t.length)return[];for(const e of t)e._core=this.core,K.isInstanceOf(e,"KritzelImage")&&await e.prepareForInsert();return this.core.store.objects.transaction((()=>{for(const e of t){if(e.id=e.generateId(),e._core=this.core,e.zIndex=this.core.store.currentZIndex,e.workspaceId=this.core.store.state.activeWorkspace.id,K.isInstanceOf(e,"KritzelText")){const t=e.content;e.editor=e.createEditor(),t&&e.setContent(t)}if(K.isInstanceOf(e,"KritzelGroup")&&e._pendingChildren.length>0){const t=new Map,i=[],n=e=>{if(0===e._pendingChildren.length)return;const r=e._pendingChildren;e._pendingChildren=[],e.childIds=[],r.forEach((r=>{const o=r.id;r.id=r.generateId(),r._core=this.core,r.zIndex=this.core.store.currentZIndex,r.workspaceId=this.core.store.state.activeWorkspace.id,t.set(o,r.id),e.childIds.push(r.id),i.push(r),K.isInstanceOf(r,"KritzelGroup")&&n(r)}))};n(e),i.forEach((e=>{K.isInstanceOf(e,"KritzelLine")&&(e.startAnchor&&t.has(e.startAnchor.objectId)&&(e.startAnchor={objectId:t.get(e.startAnchor.objectId)}),e.endAnchor&&t.has(e.endAnchor.objectId)&&(e.endAnchor={objectId:t.get(e.endAnchor.objectId)}))})),i.forEach((t=>{this.core.addObject(t)})),e.finalize(),this.core.anchorManager.rebuildIndex()}this.core.addObject(e)}})),this.core.rerender(),await new Promise((t=>{requestAnimationFrame((()=>requestAnimationFrame((()=>t()))))})),this.emitObjectsChange(),this.emitObjectsAdded(t),t}async updateObject(t,e){return this.core.deselectAllObjects(),this.core.updateObject(t,e),this.core.rerender(),this.emitObjectsChange(),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.emitObjectsChange(),this.emitObjectsRemoved([t]),t):null}async removeObjects(t){const e=this.core.store.objects;return e&&0!==t.length?(e.transaction((()=>{for(const e of t)this.core.removeObject(e)})),this.core.rerender(),this.emitObjectsChange(),this.emitObjectsRemoved(t),t):[]}async getSelectedObjects(){const t=this.core.store.selectionGroup;return t?t.objects:[]}async getDisplayableShortcuts(){return this.keyHandler.getDisplayableShortcuts()}async selectObjects(t){const e=this.core.toolRegistry.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=this.core.toolRegistry.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 panToObject(t){this.viewport.panTo(t.centerX,t.centerY)}async backToContent(){return this.viewport.centerFitNearestContent(20)}async centerAllObjects(t=!0){return this.viewport.centerFitAllObjects(t)}async centerObjects(t,e=!0){return this.viewport.centerFitObjects(t,e)}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 zoomIn(t,e){this.viewport.zoomIn(t,e)}async zoomOut(t,e){this.viewport.zoomOut(t,e)}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 getObjectsInViewport(){return this.core.getObjectsInViewport()}async getScreenshot(t="png",e){if(!this.host)return null;const i={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},n={filter:t=>!("KRITZEL-CONTEXT-MENU"===t.tagName||"KRITZEL-AWARENESS-CURSORS"===t.tagName||t.classList&&t.classList.contains("debug-panel"))};let r;(e?.includeBackground??1)||(n.backgroundColor="transparent");try{r="svg"===t?await Ae(this.host,n):await async function(t,e={}){return(await async function(t,e={}){const{width:i,height:n}=ie(t,e),r=await Ae(t,e),o=await re(r),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||n;return s.width=c*l,s.height=h*l,e.skipAutoScale||function(t){(t.width>ne||t.height>ne)&&(t.width>ne&&t.height>ne?t.width>t.height?(t.height*=ne/t.width,t.width=ne):(t.width*=ne/t.height,t.height=ne):t.width>ne?(t.height*=ne/t.width,t.width=ne):(t.width*=ne/t.height,t.height=ne))}(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,n)}finally{this.core.store.state.objects=i.objects,this.core.store.state.activeWorkspace=i.activeWorkspace,this.core.store.state.workspaces=i.workspaces,this.core.store.state.activeTool=i.activeTool,this.core.store.state.isReady=i.isReady,this.core.store.state.translateX=i.translateX,this.core.store.state.translateY=i.translateY,this.core.store.state.scale=i.scale,this.core.rerender()}return r}async exportViewportAsPng(t){try{const e=`${this.core.store.state?.activeWorkspace?.name||"workspace"}-${(new Date).toISOString().replace(/[:.]/g,"-")}.png`,i=await this.getScreenshot("png",t);if(!i)return void console.error("Failed to export viewport as PNG: screenshot could not be generated");const n=document.createElement("a");n.download=e,n.href=i,n.click()}catch(t){console.error("Failed to export viewport as PNG:",t)}}async exportViewportAsSvg(t){try{const e=`${this.core.store.state?.activeWorkspace?.name||"workspace"}-${(new Date).toISOString().replace(/[:.]/g,"-")}.svg`,i=await this.getScreenshot("svg",t);if(!i)return void console.error("Failed to export viewport as SVG: screenshot could not be generated");const n=document.createElement("a");n.download=e,n.href=i,n.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(),n=await Zt.resolveImageDataUrls(e,this.core.assetResolver);return Zt.generateSvg(e,{theme:i,padding:t?.padding??0,includeXmlDeclaration:!0,rasterSafeForCanvas:t?.rasterSafeForCanvas??!1,imageDataUrls:n})}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`,n=new Blob([e],{type:"image/svg+xml;charset=utf-8"}),r=URL.createObjectURL(n),o=document.createElement("a");o.download=i,o.href=r,o.click(),URL.revokeObjectURL(r)}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,rasterSafeForCanvas:!0});if(!e)return null;const i=t?.scale??2;return new Promise(((t,n)=>{const r=new Image,o=new Blob([e],{type:"image/svg+xml;charset=utf-8"}),s=URL.createObjectURL(o);r.onload=()=>{const e=document.createElement("canvas");e.width=r.width*i,e.height=r.height*i;const o=e.getContext("2d");if(!o)return URL.revokeObjectURL(s),void n(new Error("Failed to get canvas context"));o.scale(i,i),o.drawImage(r,0,0),URL.revokeObjectURL(s),t(e.toDataURL("image/png"))},r.onerror=()=>{URL.revokeObjectURL(s),n(new Error("Failed to load SVG for PNG conversion"))},r.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`,n=document.createElement("a");n.download=i,n.href=e,n.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!==et&&console.warn(`Workspace version mismatch: expected ${et}, got ${e.version}`);const i=I.generateUUID();let n=e.viewport||{centerWorldX:0,centerWorldY:0,scale:1};if("translateX"in n&&!("centerWorldX"in n)){const t=n.scale??1;n={centerWorldX:-(n.translateX??0)/t,centerWorldY:-(n.translateY??0)/t,scale:t}}const r=new D(i,e.name||"Imported Workspace",n);if(this.core.createWorkspace(r),this.workspacesChange.emit(this.core.store.state.workspaces),this.core.beforeWorkspaceChange(),await this.core.initializeWorkspace(r),e.objects&&Array.isArray(e.objects)){const t=new _t(this.core);for(const n of e.objects){const e=t.revive(n);e&&(e.workspaceId=i,this.core.addObject(e))}}this.core.rerender(),this.activeWorkspaceChange.emit(r)}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!==et&&console.warn(`Workspace version mismatch: expected ${et}, got ${e.version}`);const i=this.core.store.state.activeWorkspace;if(!i)throw new Error("Cannot load objects: no active workspace is loaded");const n=i.id;let r=0;if(e.objects&&Array.isArray(e.objects)){const t=new _t(this.core);for(const i of e.objects){const e=t.revive(i);e&&(e.workspaceId=n,this.core.addObject(e),r++)}}return this.core.rerender(),r}async downloadAsJson(t){try{const e=await this.exportAsJson(),i=this.core.store.state?.activeWorkspace?.name||"workspace",n=(new Date).toISOString().replace(/[:.]/g,"-"),r=t||`${i}-${n}`,o=new Blob([e],{type:"application/json;charset=utf-8"}),s=URL.createObjectURL(o),a=document.createElement("a");a.download=`${r}.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 n=()=>{i.removeEventListener("change",r),i.removeEventListener("cancel",o),document.body.removeChild(i)},r=async i=>{const r=i.target,o=r.files?.[0];if(!o)return n(),void t();try{const i=new FileReader;i.onload=async i=>{try{const e=i.target?.result;await this.importFromJson(e),n(),t()}catch(t){n(),console.error("Failed to import workspace from file:",t),e(t)}},i.onerror=()=>{n(),console.error("Failed to read file:",i.error),e(i.error)},i.readAsText(o)}catch(t){n(),console.error("Failed to process file:",t),e(t)}},o=()=>{n(),t()};i.addEventListener("change",r),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 D(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()}async saveSettings(t){const e=this.core.getStorageKey("kritzel-settings");localStorage.setItem(e,JSON.stringify(t))}async loadSettings(){const t=this.core.getStorageKey("kritzel-settings"),e=localStorage.getItem(t);if(!e)return null;try{return JSON.parse(e)}catch{return null}}async registerLocales(t){this.core.localizationManager.registerLocales(t),this.core.localizationManager.setLocale(this.core.localizationManager.currentLocale)}async setLocale(t){this.locale=t,this.core.localizationManager.setLocale(t)}async getLocale(){return this.core.localizationManager.currentLocale}async getAvailableLocales(){return this.core.localizationManager.getAvailableLocales()}async getAvailableLocaleOptions(){return this.core.localizationManager.getAvailableLocaleOptions()}async t(t,e){return this.core.localizationManager.translate(t,e)}async getResolvedTerms(){return this.core.localizationManager.getAllTerms()}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;_hasLoggedUnlicensedWelcomeBanner=!1;_previousVisibleCustomElements=new Set;_defaultUndoState={canUndo:!1,canRedo:!1,undoStackSize:0,redoStackSize:0};_objectDistanceFadeNearScale=1;_objectDistanceFadeFarScale=.15;_objectDistanceFadeMinOpacity=0;_objectDistanceFadeCloseStartScale=2;_objectDistanceFadeCloseMaxScale=4;_objectDistanceFadeCloseMinOpacity=0;syncLoadingState(){const t=this._isWorkspaceLoading||this.isLoading;this.core.store.state.isLoading=t,this.isContentHidden!==t&&(this.isContentHidden=t),this.loadingChange.emit(t)}applyToolConfig(t,e){if(Object.entries(e).forEach((([e,i])=>{t[e]=i})),"palettes"in e&&"type"in e){const i=e.palettes[e.type];i&&(t.palette=i)}if("sizes"in e&&null!=e.sizes&&"type"in e){const i=e,n=i.sizes?.[i.type];n&&(t.sizes=n)}}get isSelecting(){return this.core.store.state.activeTool instanceof c&&this.core.store.state.isSelecting}get isSelectionActive(){return this.core.store.state.activeTool instanceof c&&null!==this.core.store.selectionGroup}constructor(e){t(this,e),this.isEngineReady=n(this,"isEngineReady"),this.activeToolChange=n(this,"activeToolChange"),this.objectsSelectionChange=n(this,"objectsSelectionChange"),this.workspacesChange=n(this,"workspacesChange"),this.activeWorkspaceChange=n(this,"activeWorkspaceChange"),this.longpress=n(this,"longpress"),this.objectsChange=n(this,"objectsChange"),this.objectsAdded=n(this,"objectsAdded"),this.objectsRemoved=n(this,"objectsRemoved"),this.objectsUpdated=n(this,"objectsUpdated"),this.undoStateChange=n(this,"undoStateChange"),this.objectsInViewportChange=n(this,"objectsInViewportChange"),this.viewportChange=n(this,"viewportChange"),this.awarenessChange=n(this,"awarenessChange"),this.notificationsChange=n(this,"notificationsChange"),this.loadingChange=n(this,"loadingChange"),this.core=new Yt(this)}disconnectedCallback(){this.throttledPointerMoveMulti.cancel(),this.core.store.allObjects&&this.core.store.allObjects.forEach((t=>{K.isInstanceOf(t,"KritzelCustomElement")&&t.unmount()})),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(),this.core.licenseManager.destroy()}componentWillLoad(){this.core.setEditorId(this.editorId),this.themes&&this.themes.length>0&&this.core.themeManager.registerThemes(this.themes);const t=this.host.closest("kritzel-editor");this.core.themeManager.injectThemeEarly(t||this.host),this.locales&&this.locales.length>0&&this.core.localizationManager.registerLocales(this.locales),this.core.localizationManager.setFallbackLocale(this.fallbackLocale),this.core.localizationManager.setLocale(this.locale),this.core.licenseManager.validate(this.licenseKey),this.core.licenseManager.startPeriodicValidation(),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 Et(this.core,this.globalContextMenuItems??[],this.objectContextMenuItems??[]),this.keyHandler=new At(this.core),this.viewport=new jt(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.logUnlicensedWelcomeBanner(),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}logUnlicensedWelcomeBanner(){this.core.licenseManager.isLicensed||this._hasLoggedUnlicensedWelcomeBanner||(this._hasLoggedUnlicensedWelcomeBanner=!0,console.info("%c👋 Welcome to Kritzel","color: #007AFF; font-weight: 700;"),console.info("This version of Kritzel is not licensed. Get a license at: https://kritzel.io"))}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,n=i??(e?.skipFallbackCreation?"__NO_FALLBACK__":"__AUTO__");if(i&&this.core.store.state.activeWorkspace?.id===i)return;if(this._workspaceInitializationPromise&&this._workspaceInitializationTargetKey===n)return void await this._workspaceInitializationPromise;this._isWorkspaceLoading=!0,this.syncLoadingState();const r=this.core.initializeWorkspace(t,e);this._workspaceInitializationPromise=r,this._workspaceInitializationTargetKey=n;try{await r;const t=this.core.store.objects;await(t?.whenNetworkSynced())}finally{this._workspaceInitializationPromise===r&&(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 c||(this.core.clearSelection(),this.core.store.objects?.remove((t=>t instanceof A)),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 h||this.core.resetActiveText(),t instanceof w||this.core.resetActiveShape(),this.core.store.state.skipContextMenu=!1,t&&this.activeToolChange.emit(t),_.forceHideKeyboard(),this.core.rerender()}getObjectDistanceFadeMultiplier(t,e){if(!this.isObjectDistanceFadingActive)return 1;const i=Math.max(Number.isFinite(e)?e:1,Number.EPSILON)/Math.max(Number.isFinite(t)?t:1,Number.EPSILON),n=this.getFarDistanceFadeMultiplier(i),r=this.getCloseDistanceFadeMultiplier(i);return Math.min(n,r)}getFarDistanceFadeMultiplier(t){if(t>=this._objectDistanceFadeNearScale)return 1;if(t<=this._objectDistanceFadeFarScale)return this._objectDistanceFadeMinOpacity;const e=(this._objectDistanceFadeNearScale-t)/(this._objectDistanceFadeNearScale-this._objectDistanceFadeFarScale);return 1-e*e*(3-2*e)*(1-this._objectDistanceFadeMinOpacity)}getCloseDistanceFadeMultiplier(t){if(t<=this._objectDistanceFadeCloseStartScale)return 1;if(t>=this._objectDistanceFadeCloseMaxScale)return this._objectDistanceFadeCloseMinOpacity;const e=(t-this._objectDistanceFadeCloseStartScale)/(this._objectDistanceFadeCloseMaxScale-this._objectDistanceFadeCloseStartScale);return 1-e*e*(3-2*e)*(1-this._objectDistanceFadeCloseMinOpacity)}shouldApplyDistanceFade(t){return!K.isInstanceOf(t,"KritzelSelectionGroup")&&!K.isInstanceOf(t,"KritzelSelectionBox")}getObjectEffectiveOpacity(t,e){const i=Number.isFinite(t.opacity)?t.opacity:1,n=this.shouldApplyDistanceFade(t)?this.getObjectDistanceFadeMultiplier(t.scale,e):1;return{multiplied:(t.markedForRemoval?.5:1)*i*n,overridden:((t.markedForRemoval?.5:i)*n).toString()}}getSelectionHandleCapabilities(t){const e=K.isInstanceOf(t,"KritzelSelectionGroup")?t.objects:[t];return{canRenderResizeHandles:e.every((t=>!1!==t.isResizable)),canRenderRotationHandle:e.every((t=>!1!==t.isRotatable))}}render(){if(!this.viewport)return e(i,null);const t=this.core.themeManager.getStoredTheme(),n=window.getComputedStyle(this.host).getPropertyValue("--kritzel-selection-handle-size").trim()||"6px",r=parseFloat(n),o=2*r<14?14:r,s=this.core.store.state.scale,l=this.core.store.state.viewportWidth/2+this.core.store.state.translateX,c=this.core.store.state.viewportHeight/2+this.core.store.state.translateY,h=this.core.store.objectsInViewport,u=t=>this.core.store.state.isScaling||K.isInstanceOf(t,"KritzelSelectionGroup")?"none":"auto",d=t=>t.markedForRemoval||K.isInstanceOf(t,"KritzelSelectionGroup")&&1===t.objects.length&&K.isInstanceOf(t.objects[0],"KritzelCustomElement")?"none":"auto",f=new Set;return h.forEach((t=>{K.isInstanceOf(t,"KritzelCustomElement")&&f.add(t.id)})),this._previousVisibleCustomElements.forEach((t=>{if(!f.has(t)){const e=this.core.store.objects.findById(t);e&&K.isInstanceOf(e,"KritzelCustomElement")&&e.unmount()}})),this._previousVisibleCustomElements=f,this.core.cursorManager.applyCursor(),this.core.store.state.hasViewportChanged&&(this.viewportChange.emit(this.viewport.getViewport()),this.core.store.totalObjectCount>0&&this.emitObjectsInViewportChange()),e(i,{class:{"is-content-hidden":this.isContentHidden}},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: (",l.toFixed(2),", ",c.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})`}},h?.map((i=>{const{multiplied:n,overridden:l}=this.getObjectEffectiveOpacity(i,s);return e("div",{key:i.id,id:i.id,class:"object",style:{transform:i?.transformationMatrix,transformOrigin:"top left",position:"absolute",zIndex:this.core.displaySelectionLineUI(i)?"10001":i.zIndex.toString(),pointerEvents:u(i)}},K.isInstanceOf(i,"KritzelPath")&&e("svg",{ref:t=>t&&i.mount(t),xmlns:"http://www.w3.org/2000/svg",style:{height:i?.totalHeight+"px",width:i?.totalWidth+"px",left:"0",top:"0",position:"absolute",transform:0!==i.rotationDegrees?`rotate(${i.rotationDegrees}deg)`:void 0,transformOrigin:0!==i.rotationDegrees?`${i.totalWidth/2}px ${i.totalHeight/2}px`:void 0,pointerEvents:i.markedForRemoval?"none":"auto",overflow:"visible"},viewBox:i?.viewBox},e("path",{d:i?.d,fill:a.applyOpacity(i.fill,n,t),stroke:a.applyOpacity(i?.stroke,n,t),"shape-rendering":i.isLowRes()?"optimizeSpeed":"auto"})),K.isInstanceOf(i,"KritzelLine")&&e("svg",{ref:t=>t&&i.mount(t),xmlns:"http://www.w3.org/2000/svg",style:{height:i?.totalHeight+"px",width:i?.totalWidth+"px",left:"0",top:"0",position:"absolute",transform:0!==i.rotationDegrees?`rotate(${i.rotationDegrees}deg)`:void 0,transformOrigin:0!==i.rotationDegrees?`${i.totalWidth/2}px ${i.totalHeight/2}px`:void 0,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"),n),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"),n),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,n,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})),K.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:l,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()}),K.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:l,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)}})),K.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:l,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"}}),K.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:d(i)}}),K.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"}}),K.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:l,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"}})),K.isInstanceOf(i,"KritzelShape")&&(()=>{const r=a.resolveThemeColor(i.fillColor,t),o=a.resolveThemeColor(i.strokeColor,t),s=!!r&&"transparent"!==r&&o===r;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,n,t),stroke:s?"none":a.applyOpacity(i.strokeColor,n,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&&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"}},"scale: ",i.scale),e("div",{style:{whiteSpace:"nowrap",fontSize:"10px"}},"rotationDegrees: ",i.rotationDegrees),e("div",{style:{whiteSpace:"nowrap",fontSize:"10px"}},"zIndex: ",i.zIndex),e("div",{style:{whiteSpace:"nowrap",fontSize:"10px"}},"isSelected: ",i.isSelected?"true":"false"),K.isInstanceOf(i,"KritzelCustomElement")&&e("div",null,e("div",{style:{whiteSpace:"nowrap",fontSize:"10px"}},"isInteractive: ",i.isInteractive?"true":"false")),K.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 n=K.isInstanceOf(i,"KritzelSelectionGroup"),s=this.core.store.objects?.localClientId,l=this.core.store.objects?.awareness?.getStates(),c=n&&(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&&(n&&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)",f=null!=i.endAnchor,p=this.core.store.state.snapCandidate??this.core.store.state.snapPreviewCandidate,g=null!=i.startAnchor||"start"===p?.endpoint,b=f||"end"===p?.endpoint,v=this.core.displaySelectionLineUI(i)?"10000":(i.zIndex+1).toString(),m=i.scale??1,{canRenderResizeHandles:k,canRenderRotationHandle:y}=this.getSelectionHandleCapabilities(i);return e("svg",{xmlns:"http://www.w3.org/2000/svg",style:{zIndex:v,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&&K.isInstanceOf(i,"KritzelSelectionGroup")&&1===i.objects.length&&K.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"}},k&&e("g",null,e("rect",{class:"resize-handle top-left",x:""+-(r-1)*m/this.core.store.state?.scale,y:""+-(r-1)*m/this.core.store.state?.scale,width:""+2*(r-1)*m/this.core.store.state?.scale,height:""+2*(r-1)*m/this.core.store.state?.scale,style:{fill:"var(--kritzel-selection-handle-color, #ffffff)",stroke:d,strokeWidth:`calc(2px * ${m} / ${this.core.store.state?.scale})`,paintOrder:"fill"}}),e("rect",{class:"resize-handle-overlay top-left",x:""+-o*m/this.core.store.state?.scale,y:""+-o*m/this.core.store.state?.scale,width:""+2*o*m/this.core.store.state?.scale,height:""+2*o*m/this.core.store.state?.scale,style:{fill:"transparent",paintOrder:"fill"}}),e("rect",{class:"resize-handle top-right",x:""+(i.totalWidth-(r-1)*m/this.core.store.state?.scale),y:""+-(r-1)*m/this.core.store.state?.scale,width:""+2*(r-1)*m/this.core.store.state?.scale,height:""+2*(r-1)*m/this.core.store.state?.scale,style:{fill:"var(--kritzel-selection-handle-color, #ffffff)",stroke:d,strokeWidth:`calc(2px * ${m} / ${this.core.store.state?.scale})`,paintOrder:"fill"}}),e("rect",{class:"resize-handle-overlay top-right",x:""+(i.totalWidth-o*m/this.core.store.state?.scale),y:""+-o*m/this.core.store.state?.scale,width:""+2*o*m/this.core.store.state?.scale,height:""+2*o*m/this.core.store.state?.scale,style:{fill:"transparent",paintOrder:"fill"}}),e("rect",{class:"resize-handle bottom-left",x:""+-(r-1)*m/this.core.store.state?.scale,y:""+(i.totalHeight-(r-1)*m/this.core.store.state?.scale),width:""+2*(r-1)*m/this.core.store.state?.scale,height:""+2*(r-1)*m/this.core.store.state?.scale,style:{fill:"var(--kritzel-selection-handle-color, #ffffff)",stroke:d,strokeWidth:`calc(2px * ${m} / ${this.core.store.state?.scale})`,paintOrder:"fill"}}),e("rect",{class:"resize-handle-overlay bottom-left",x:""+-o*m/this.core.store.state?.scale,y:""+(i.totalHeight-o*m/this.core.store.state?.scale),width:""+2*o*m/this.core.store.state?.scale,height:""+2*o*m/this.core.store.state?.scale,style:{fill:"transparent",paintOrder:"fill"}}),e("rect",{class:"resize-handle bottom-right",x:""+(i.totalWidth-(r-1)*m/this.core.store.state?.scale),y:""+(i.totalHeight-(r-1)*m/this.core.store.state?.scale),width:""+2*(r-1)*m/this.core.store.state?.scale,height:""+2*(r-1)*m/this.core.store.state?.scale,style:{fill:"var(--kritzel-selection-handle-color, #ffffff)",stroke:d,strokeWidth:`calc(2px * ${m} / ${this.core.store.state?.scale})`,paintOrder:"fill"}}),e("rect",{class:"resize-handle-overlay bottom-right",x:""+(i.totalWidth-o*m/this.core.store.state?.scale),y:""+(i.totalHeight-o*m/this.core.store.state?.scale),width:""+2*o*m/this.core.store.state?.scale,height:""+2*o*m/this.core.store.state?.scale,style:{fill:"transparent",paintOrder:"fill"}})),y&&e("g",null,e("line",{x1:i.totalWidth/2,y1:"0",x2:i.totalWidth/2,y2:-15*m/this.core.store.state?.scale,style:{stroke:u,strokeWidth:`calc(var(--kritzel-selection-border-width, 2px) * ${m} / ${this.core.store.state?.scale})`}}),e("circle",{class:"rotation-handle",cx:i.totalWidth/2,cy:-15*m/this.core.store.state?.scale,r:""+(r-1)*m/this.core.store.state?.scale,style:{fill:"var(--kritzel-selection-handle-color, #ffffff)",stroke:d,strokeWidth:`calc(2px * ${m} / ${this.core.store.state?.scale})`,paintOrder:"fill"}}),e("circle",{class:"rotation-handle-overlay",cx:i.totalWidth/2,cy:-15*m/this.core.store.state?.scale,r:""+o*m/this.core.store.state?.scale,style:{fill:"transparent",paintOrder:"fill"}})))),this.core.displaySelectionLineUI(i)&&K.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:""+(r-1)*i.scale/this.core.store.state?.scale,style:{fill:g?d:"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:""+(r-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:""+(r-1)*i.scale/this.core.store.state?.scale,style:{fill:b?d:"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.getSnapIndicatorRenderData()??this.core.anchorManager.getSnapPreviewRenderData();if(!t)return null;const i=null!=this.core.anchorManager.getSnapIndicatorRenderData();return 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:i?"var(--kritzel-snap-line-stroke, rgba(0, 0, 0, 0.2))":"var(--kritzel-snap-line-stroke, rgba(0, 0, 0, 0.12))",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:i?"var(--kritzel-snap-line-stroke, rgba(0, 0, 0, 0.2))":"var(--kritzel-snap-line-stroke, rgba(0, 0, 0, 0.12))",strokeWidth:t.lineStrokeWidth,strokeDasharray:t.dashArray,strokeLinecap:"round"}}),e("circle",{cx:t.centerX,cy:t.centerY,r:t.indicatorRadius,style:{fill:i?"var(--kritzel-snap-indicator-fill, rgba(59, 130, 246, 0.3))":"rgba(59, 130, 246, 0.18)",stroke:i?"var(--kritzel-snap-indicator-stroke, #007bff)":"rgba(59, 130, 246, 0.5)",strokeWidth:t.indicatorStrokeWidth}})))})(),(()=>{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(59, 130, 246, 0.3))",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})()),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:"absolute",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.contextMenuWorldX,y:this.core.store.state.contextMenuWorldY},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}),!this.core.licenseManager.isLicensed&&e("kritzel-watermark",{core:this.core,label:this.core.localizationManager.translate("watermark.poweredBy")}))}static get watchers(){return{workspace:[{onWorkspaceChange:0}],activeWorkspaceId:[{onActiveWorkspaceIdChange:0}],syncConfig:[{onSyncConfigChange:0}],assetStorageConfig:[{onAssetStorageConfigChange:0}],user:[{onUserChange:0}],globalContextMenuItems:[{onGlobalContextMenuItemsChange:0}],objectContextMenuItems:[{onObjectContextMenuItemsChange:0}],scaleMax:[{validateScaleMax:0}],scaleMin:[{validateScaleMin:0}],cursorTarget:[{onCursorTargetChange:0}],lockDrawingScale:[{onLockDrawingScaleChange:0}],isObjectDistanceFadingActive:[{onIsObjectDistanceFadingActiveChange:0}],theme:[{onThemeChange:0}],licenseKey:[{onLicenseKeyChange:0}],themes:[{onThemesChange:0}],locale:[{onLocaleChange:0}],locales:[{onLocalesChange:0}],fallbackLocale:[{onFallbackLocaleChange:0}],viewportBoundaryLeft:[{onViewportBoundaryLeftChange:0}],viewportBoundaryRight:[{onViewportBoundaryRightChange:0}],viewportBoundaryTop:[{onViewportBoundaryTopChange:0}],viewportBoundaryBottom:[{onViewportBoundaryBottomChange:0}],debugInfo:[{onDebugInfoChange:0}],isLoading:[{onIsLoadingChange:0}]}}};_e.style=":host{display:block;position:relative;height:100%;width:100%;overflow:hidden;isolation:isolate;background-color:var(--kritzel-engine-background-color, #ffffff);opacity:1;transition:opacity 200ms ease}:host(.is-content-hidden){opacity:0;pointer-events:none}:host,:host *{touch-action:none;user-select:none}.ProseMirror{outline:none}p,h1,h2,h3,h4,h5,h6,blockquote,pre{margin:0;padding:0}.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 Oe=class{constructor(e){t(this,e),this.exportPng=n(this,"exportPng"),this.exportSvg=n(this,"exportSvg"),this.exportJson=n(this,"exportJson")}workspaceName="workspace";terms={};isDialogOpen=!1;previewUrl;isLoading=!1;activeTab="viewport";exportFilename="";viewportExportFormat="png";exportPng;exportSvg;exportJson;get tabs(){return[{id:"viewport",label:this.terms["export.tabs.viewport"]??"Export Viewport"},{id:"workspace",label:this.terms["export.tabs.workspace"]??"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:this.terms["export.filename.label"]??"Filename",value:this.exportFilename,placeholder:this.terms["export.filename.placeholder"]??"Enter filename",suffix:`.${this.viewportExportFormat}`,onValueChange:this.handleFilenameChange}),e("div",{class:"format-selection"},e("label",null,this.terms["export.format.label"]??"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:this.terms["export.filename.label"]??"Filename",value:this.exportFilename,placeholder:this.terms["export.filename.placeholder"]??"Enter filename",suffix:".json",onValueChange:this.handleFilenameChange}))}render(){return e(i,{key:"5706e0f8688777826452ca0cf81e2581f6e2d14a"},e("kritzel-dialog",{key:"8d0d26a672604aec2b899a7ea05ab40031ac9c43",isOpen:this.isDialogOpen,dialogTitle:this.terms["export.dialogTitle"]??"Export",closable:!0,contained:!0,onDialogClose:this.closeDialog},e("div",{key:"a4c3f5a2961aca9dd5cba4045b8bd53635681ab0",class:"export-content"},e("kritzel-pill-tabs",{key:"51a40a8596e492130cc8fa4c977cde916d7d8392",tabs:this.tabs,value:this.activeTab,onValueChange:this.handleTabChange}),"viewport"===this.activeTab&&this.renderViewportExport(),"workspace"===this.activeTab&&this.renderWorkspaceExport(),e("button",{key:"a4b8e1503a0a8e682d10623bc334fcc70b5ea243",class:"export-primary-button",onClick:this.handleExport},this.terms["export.exportButton"]??"Export"))))}};Oe.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:var(--kritzel-button-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 De=class{constructor(e){t(this,e)}fontFamily="Arial, sans-serif";size=24;color="#000000";render(){return e(i,{key:"054371cac30a2433611139a670406b0a1e3b99ff"},e("div",{key:"b4f2142b3cb31d067f39952a38b6f665f28f63bf",class:"font-preview",style:{fontFamily:this.fontFamily,fontSize:`${this.size}px`,color:this.color}},"A"))}};De.style=":host{display:block}.font-preview{color:var(--kritzel-font-size-text-color, #333333);line-height:1;text-align:center;font-weight:bold}";const Fe=class{constructor(e){t(this,e),this.fontFamilyChange=n(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:"0123dbdff9b7051d2ebc9dcf8d1f9c7c4c161dc4"},e("kritzel-dropdown",{key:"5d4e289161502ecc60cef3d0c6d546a64817a12a",options:t,value:this.selectedFontFamily,onValueChanged:this.handleDropdownValueChange,selectStyles:{fontFamily:this.selectedFontFamily}}))}};Fe.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 Re=class{constructor(e){t(this,e),this.sizeChange=n(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:"56eb19367abe312bac3b626cfcae3b1ff6e90d21"},(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)"})))))}};Re.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 Le=class{constructor(e){t(this,e)}name;label;size=24;render(){const t=E.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`},"?"))}};Le.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 Pe=class{constructor(e){t(this,e),this.valueChange=n(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:"46a0a48902a06ad85edcbaad3679ce3fe9ba850c"},e("div",{key:"a6beaf920614aa959d2fbd68b7268afba8637358",class:"input-container"},this.label&&e("label",{key:"ca6d3fb3c22f1540795dbb0695ddd9b87cc05eee",class:"input-label"},this.label),e("div",{key:"78d116e82531a9cca996d594792245449bcaf9c8",class:{"input-wrapper":!0,"has-suffix":!!this.suffix}},e("input",{key:"0d10d6356dea3a11338172bbe8c3c878eefcc708",type:this.type,class:"text-input",value:this.inputValue,placeholder:this.placeholder,disabled:this.disabled,onInput:this.handleInput}),this.suffix&&e("span",{key:"0e6166ba8728efc1035302d7fb048306efbe5a68",class:"input-suffix"},this.suffix))))}static get watchers(){return{value:[{onValueChange:0}]}}};Pe.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:var(--kritzel-text-input-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 Be=class{constructor(e){t(this,e),this.valueChange=n(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 n="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:n,"stroke-width":"2","stroke-linecap":"round"}));const r=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:n,"stroke-width":"2","stroke-linecap":"round"}),e("g",{transform:"translate(2, 1) scale(1, 1)"},e("path",{d:r,fill:o?"none":n,stroke:n,"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:n,"stroke-width":"2","stroke-linecap":"round"}),e("g",{transform:"translate(12, 1)"},e("path",{d:r,fill:o?"none":n,stroke:n,"stroke-width":o?2:0,"stroke-linecap":"round","stroke-linejoin":"round"}))))}render(){const t=this.getStartEnding(),n=this.getEndEnding();return e(i,{key:"60115b8a2840ffe21e0846fdc2678c6ba24b22c0"},e("div",{key:"3b63aa05ca78699172c645fdd404efdc55bc4536",class:"endings-section"},e("div",{key:"9538369e8d2bb26600d6054ddbbc13d6c960bd56",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:"ecec29740c09a61190938bab4955ccde6b84cfa2",class:"endings-section"},e("div",{key:"ea054597c3e3566e7921f2c04c07d74e4f4331a1",class:"endings-row"},this.styles.map((t=>e("button",{class:{"ending-option":!0,selected:n===t},onClick:()=>this.handleEndChange(t),title:"none"===t?"No end arrow":`${t} end arrow`},this.renderEndingIcon(t,!1)))))))}};Be.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 We=class{constructor(e){t(this,e)}visible=!1;text="Loading...";render(){return e(i,{key:"b8c4784803ca5a0e6bf3f25c1d39139307bb6d50"},e("div",{key:"5a8a2c44f1800c0275d1a94aa0eb5c2854be63b5",class:{"loading-overlay":!0,visible:this.visible},"aria-hidden":this.visible?"false":"true"},e("span",{key:"04e33166e054d7a600a83dacd48e3fb50ab69d22",class:"loading-spinner"}),this.text))}};We.style=":host{display:contents}.loading-overlay{position:absolute;inset:0;z-index:var(--kritzel-loading-overlay-z-index, 9999);display:flex;align-items:center;justify-content:center;gap:10px;background-color:var(--kritzel-loading-overlay-background, rgba(255, 255, 255, 0.6));color:var(--kritzel-loading-overlay-color, #333);font-family:var(--kritzel-font-family, sans-serif);font-size:1.25rem;opacity:0;pointer-events:none;visibility:hidden}.loading-overlay.visible{pointer-events:all;visibility:visible;animation:kritzel-loading-fade-in 200ms ease-out var(--kritzel-loading-overlay-delay, 300ms) forwards}.loading-spinner{width:20px;height:20px;box-sizing:border-box;display:block;flex-shrink:0;border:2px solid var(--kritzel-loading-overlay-spinner-color, #cccccc);border-top-color:var(--kritzel-loading-overlay-spinner-active-color, #333333);border-radius:50%;animation:kritzel-loading-spin 0.6s linear infinite}@keyframes kritzel-loading-spin{to{transform:rotate(360deg)}}@keyframes kritzel-loading-fade-in{to{opacity:1}}";const Ve=class{constructor(e){t(this,e),this.providerLogin=n(this,"providerLogin"),this.dialogClosed=n(this,"dialogClosed")}get host(){return r(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:"5cedcb4fa0a9026338e930cfbbdbfa1df9853530"},e("kritzel-dialog",{key:"1502a2dc67630b0a1399ef6e8d1a2fdcd4d50913",dialogTitle:this.dialogTitle,isOpen:this.isDialogOpen,onDialogClose:this.closeDialog,size:"small",contained:!0},e("div",{key:"f84a888ccc0b1cb2052e30af56a08910da8d85b5",class:"login-content"},this.subtitle&&e("p",{key:"971040609c43efea30a7bfd0c1a3de2113f77a2b",class:"login-subtitle"},this.subtitle),e("div",{key:"ecb0c648ce0d9a8ca8b10e6a520273d817c7a0fe",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))))))))}};Ve.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 Ne=class{constructor(e){t(this,e),this.itemSelect=n(this,"itemSelect")}get host(){return r(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 n=this.items.map(((t,e)=>t.disabled?-1:e)).filter((t=>-1!==t)),r=n.indexOf(i);switch(t.key){case"ArrowDown":t.preventDefault(),this.focusTab(n[(r+1)%n.length]);break;case"ArrowUp":t.preventDefault(),this.focusTab(n[(r-1+n.length)%n.length]);break;case"Home":t.preventDefault(),this.focusTab(n[0]);break;case"End":t.preventDefault(),this.focusTab(n[n.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)),n="master-detail-panel",r=t?`tab-${t.id}`:void 0;return e(i,{key:"0edf50b0b853633b88bf481f97f22aceba9e163e"},e("div",{key:"21a0a3f81e5a60889ccd152c905cb41f52c3e037",class:{"master-detail-container":!0,"is-mobile-detail-visible":this.showMobileDetail}},e("nav",{key:"41f88248cc372c8cae4cb50a19edf462a01e43f2",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":n,"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:"f8447facf3dfdbd7772823654847e1b90b03f73e",id:n,class:"detail-panel",role:"tabpanel","aria-labelledby":r},e("button",{key:"3edc9784267613e6b3a706739bbb537161e4c747",class:"mobile-back-button",onClick:this.handleBackClick,"aria-label":"Back to menu"},e("kritzel-icon",{key:"ec0b4691735578525e5863842271366e04b13fb7",name:"chevron-left",size:20,class:"mobile-back-icon"}),"Back"),e("slot",{key:"c21fbaff78f98859b9756427125b60504d4bb630"}))))}static get watchers(){return{selectedItemId:[{watchSelectedItemId:0}]}}};Ne.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 Ke=class{constructor(e){t(this,e),this.itemSelect=n(this,"itemSelect"),this.itemSave=n(this,"itemSave"),this.itemCancel=n(this,"itemCancel"),this.itemToggleChildMenu=n(this,"itemToggleChildMenu"),this.itemCloseChildMenu=n(this,"itemCloseChildMenu"),this.close=n(this,"close")}get host(){return r(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:"27a90a3a8549517a2d6e341a5da13496bf714970",tabIndex:0,onClick:t=>t.stopPropagation()},this.openChildMenuItem&&e("div",{key:"c0c2351fac389f6676b38481eaacee553ca6867a",class:"has-open-child-overlay",onClick:this.onOverlayClick}),this.items.map((t=>e("kritzel-menu-item",{key:t.id,"data-testid":`menu-item-${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}))))}};Ke.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 Ue=class{constructor(e){t(this,e),this.itemSelect=n(this,"itemSelect"),this.itemSave=n(this,"itemSave"),this.itemCancel=n(this,"itemCancel"),this.itemToggleChildMenu=n(this,"itemToggleChildMenu"),this.itemCloseChildMenu=n(this,"itemCloseChildMenu")}get host(){return r(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(),l.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=()=>{l.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:"9d6653a630da5a3da38291d89d6d7d59d6994e02",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:"48a1678296e672c6c03fb3e1473c42d3a246d481",class:"menu-item-overlay"}),this.item.isEditing?this.renderEditMode():this.renderViewMode())}static get watchers(){return{item:[{onItemChange:0}]}}};Ue.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 He=class{constructor(e){t(this,e),this.itemSelect=n(this,"itemSelect")}get host(){return r(this)}visible=!1;items=[];icon="ellipsis-vertical";iconSize=24;offsetY=4;terms={};itemSelect;menuAnchor=null;isTouchDevice=l.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:"b7736b67210f2d2f6b54296dd680104548d61641",class:{mobile:this.isTouchDevice},style:{display:this.visible?"":"none"}},e("div",{key:"076ecc02a1469bd87cb27f63f1d41183bedb11d4",class:{"more-menu-wrapper":!0,visible:this.visible}},e("button",{key:"cefe02e440391eb079af7b8accc367a291e93d6a",class:"more-menu-button","data-testid":"more-menu-button",onClick:this.toggleMenu,"aria-label":this.terms["moreMenu.ariaLabel"]??"More options"},e("kritzel-icon",{key:"cb6f4dd0f37ac0fbf1e1c28a0dc06e097e38ee00",name:this.icon,size:this.iconSize})),e("kritzel-portal",{key:"29099deb5b56b1a1388caa81a3c7104a05ad66a7",anchor:this.menuAnchor,offsetY:this.offsetY,onClose:this.closeMenu},e("kritzel-menu",{key:"b77286ec05add0a20bbc46f99ac7210395d0d33d",items:this.visibleItems,onItemSelect:this.handleMenuItemSelect}))))}};He.style=":host{display:inline-flex;z-index:1}.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 Ge=class{constructor(e){t(this,e),this.dismiss=n(this,"dismiss"),this.hoverChange=n(this,"hoverChange")}notification;showTimestamp=!0;locale;dismiss;hoverChange;handleDismissClick=t=>{t.stopPropagation(),this.dismiss.emit()};handleMouseEnter=()=>{this.hoverChange.emit(!0)};handleMouseLeave=()=>{this.hoverChange.emit(!1)};get type(){return this.notification?.type??"info"}get role(){return"error"===this.type?"alert":"status"}getTypeLabel(t){switch(t){case"warning":return"Warning";case"error":return"Error";default:return"Info"}}formatTimestamp(t){if(!t||!this.showTimestamp)return null;const e=t instanceof Date?t:new Date(t);return Number.isNaN(e.getTime())?null:new Intl.DateTimeFormat(this.locale,{dateStyle:"medium",timeStyle:"short"}).format(e)}render(){const t=this.notification;if(!t)return e(i,null);const n=this.type,r=this.formatTimestamp(t.timestamp);return e(i,null,e("article",{class:{card:!0,[`type-${n}`]:!0},role:this.role,"aria-live":"polite",onMouseEnter:this.handleMouseEnter,onMouseLeave:this.handleMouseLeave},e("header",{class:"card-header"},e("span",{class:"type-pill"},this.getTypeLabel(n)),e("div",{class:"header-right"},r&&e("time",{class:"timestamp",dateTime:t.timestamp?.toISOString()},r),e("button",{class:"dismiss-button",type:"button","aria-label":"Dismiss notification",onClick:this.handleDismissClick},e("kritzel-icon",{name:"x",size:16})))),e("p",{class:"message"},t.message)))}};Ge.style=":host{display:block}.card{box-sizing:border-box;width:100%;max-width:var(--kritzel-notification-card-max-width, 360px);margin-inline:auto;font-family:var(--kritzel-font-family, sans-serif);padding:var(--kritzel-notification-card-padding, 12px 14px);border:var(--kritzel-notification-card-border, 1px solid #e5e7eb);border-radius:var(--kritzel-notification-card-border-radius, 12px);background-color:var(--kritzel-notification-card-background-color, #ffffff);color:var(--kritzel-notification-card-color, #111827);box-shadow:var(--kritzel-notification-card-box-shadow, 0 8px 20px rgba(15, 23, 42, 0.08))}.card-header{display:flex;align-items:center;justify-content:space-between;gap:var(--kritzel-notification-card-header-gap, 8px);margin-bottom:var(--kritzel-notification-card-header-margin-bottom, 8px)}.header-right{display:inline-flex;align-items:center;gap:var(--kritzel-notification-card-header-right-gap, 6px)}.type-pill{display:inline-flex;align-items:center;justify-content:center;min-height:var(--kritzel-notification-card-pill-height, 22px);padding:var(--kritzel-notification-card-pill-padding, 0 8px);border-radius:var(--kritzel-notification-card-pill-border-radius, 999px);background-color:var(--kritzel-notification-card-pill-background-color, #eff6ff);color:var(--kritzel-notification-card-pill-color, #1d4ed8);font-size:var(--kritzel-notification-card-pill-font-size, 12px);font-weight:var(--kritzel-notification-card-pill-font-weight, 600);line-height:1}.card.type-info .type-pill{background-color:var(--kritzel-notification-card-info-pill-background-color, #eff6ff);color:var(--kritzel-notification-card-info-pill-color, #1d4ed8)}.card.type-warning .type-pill{background-color:var(--kritzel-notification-card-warning-pill-background-color, #fff7ed);color:var(--kritzel-notification-card-warning-pill-color, #b45309)}.card.type-error .type-pill{background-color:var(--kritzel-notification-card-error-pill-background-color, #fef2f2);color:var(--kritzel-notification-card-error-pill-color, #b91c1c)}.timestamp{color:var(--kritzel-notification-card-timestamp-color, #6b7280);font-size:var(--kritzel-notification-card-timestamp-font-size, 12px);white-space:nowrap}.dismiss-button{display:inline-flex;align-items:center;justify-content:center;width:var(--kritzel-notification-card-dismiss-button-size, 24px);height:var(--kritzel-notification-card-dismiss-button-size, 24px);padding:0;border:none;border-radius:var(--kritzel-notification-card-dismiss-button-border-radius, 6px);background:var(--kritzel-notification-card-dismiss-button-background-color, transparent);color:var(--kritzel-notification-card-dismiss-button-color, #4b5563);cursor:var(--kritzel-global-pointer-cursor, pointer);-webkit-tap-highlight-color:transparent}.dismiss-button:hover{background:var(--kritzel-notification-card-dismiss-button-hover-background-color, #f3f4f6)}.dismiss-button:active{background:var(--kritzel-notification-card-dismiss-button-active-background-color, #e5e7eb)}.dismiss-button:focus-visible{outline:revert}.message{margin:0;color:var(--kritzel-notification-card-message-color, inherit);font-size:var(--kritzel-notification-card-message-font-size, 14px);line-height:var(--kritzel-notification-card-message-line-height, 1.45);word-break:break-word}";const qe=class{constructor(e){t(this,e),this.valueChange=n(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:"8901e0b56ccbc344420483a4a56663f7cd74d9e8"},e("div",{key:"5f3d6b5c56007e11383aa69f60f22031b0e8f332",class:"input-container"},this.label&&e("label",{key:"2cb102a5b6c16d068f4f304fbcc6241f79fc0ce8",class:"input-label"},this.label),e("div",{key:"96441095acc3d9a8e77b6d2bac2ceda683c9c976",class:"input-wrapper"},e("input",{key:"523a5485111077e20faded235df6362e5ea9cfd4",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:"2071e98125a8d014513e93052bd8c1fee17932a5",class:"spinner-buttons"},e("button",{key:"12422e5285dfb532dbbb6eb1a36dbcb3de50f2bc",type:"button",class:"spinner-button spinner-up",onClick:this.handleIncrement,tabIndex:-1,"aria-label":"Increase value"},e("svg",{key:"49ad5625c80fae6706ba4ab91f47bd550481ef74",viewBox:"0 0 10 6",class:"spinner-icon"},e("path",{key:"ff7d19b61baeb5ba58bb60f2cc629bcec6eb4411",d:"M1 5L5 1L9 5",stroke:"currentColor","stroke-width":"1.5",fill:"none","stroke-linecap":"round","stroke-linejoin":"round"}))),e("button",{key:"e4fec28e4fc997e007127f2b30b00cc752433221",type:"button",class:"spinner-button spinner-down",onClick:this.handleDecrement,tabIndex:-1,"aria-label":"Decrease value"},e("svg",{key:"27bf06cde8de11f4a97090911afd6b8993463112",viewBox:"0 0 10 6",class:"spinner-icon"},e("path",{key:"ed7071dd79bfe509ebb319ce43ecb3e982dd4157",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}]}}};qe.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:var(--kritzel-numeric-input-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 var(--kritzel-numeric-input-spinner-border-radius, 5px) var(--kritzel-numeric-input-spinner-border-radius, 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 Ye=class{constructor(e){t(this,e),this.valueChange=n(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:"2dadd8a7c4d1af748e91a6005433288ab231f2e8"},e("div",{key:"65ae90d95bffff244d97329754cf0cb8f73331fa",class:"opacity-container"},e("div",{key:"90e95347f7015882112f0653a25347e715233227",class:"slider-wrapper"},e("input",{key:"15836bc089c1725062016677d3b95384d1958431",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}%`,"--kritzel-opacity-slider-thumb-border-color":this.previewColor}}))))}};Ye.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 Ze=class{constructor(e){t(this,e),this.valueChange=n(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 n=e;switch(t.key){case"ArrowLeft":t.preventDefault(),n=e>0?e-1:i.length-1;break;case"ArrowRight":t.preventDefault(),n=e<i.length-1?e+1:0;break;case"Home":t.preventDefault(),n=0;break;case"End":t.preventDefault(),n=i.length-1;break;default:return}this.handleTabClick(i[n].id);const r=t.currentTarget.parentElement,o=r?.querySelectorAll("button");o?.[n]?.focus()}render(){return e(i,{key:"f02f93ada5ec002695b62f511c847de201a8cbe4"},e("div",{key:"bb08ae773f1b993cb330556a5778d71fc5e91ce1",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))))))}};Ze.style=":host{display:block;max-width:100%}.pill-tabs-container{display:inline-flex;align-items:center;gap:4px;padding:4px;max-width:100%;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;min-width:0;max-width:100%;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{display:block;min-width:0;max-width:var(--kritzel-pill-tabs-tab-label-max-width, 10rem);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1}.pill-tab kritzel-icon{flex-shrink:0}";const Xe=class{constructor(e){t(this,e),this.close=n(this,"close")}get host(){return r(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)),n=this.anchor&&e.some((t=>t===this.anchor));i||n||(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(!d.isElementInViewport(this.anchor))return this.anchor?.blur(),void this.closePortal();this.calculatePosition()}portal;id=`portal-${I.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=d.getFocusableElements(this.host);if(0===e.length)return;const i=e[0],n=e[e.length-1],r=this.getDeepActiveElement();t.shiftKey?r===i&&(n.focus(),t.preventDefault()):r===n&&(i.focus(),t.preventDefault())}get firstFocusableElement(){const t=this.host.shadowRoot?.querySelector("slot"),e=t?.assignedElements({flatten:!0})[0];return e?d.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 n;n=t.left+t.width/2>window.innerWidth/2?t.right-e.width-i:t.left+i;const r=window.innerWidth-e.width-this.minLeft;return n<this.minLeft&&(n=this.minLeft),n>r&&(n=r),Math.round(n+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 n=t.bottom+i;const r=window.innerHeight-t.bottom-i-8,o=t.top-i-8;return this.host.style.removeProperty("--kritzel-portal-max-height"),e.height<=r?n=t.bottom+i:e.height<=o?n=t.top-e.height-i:r>=o?(n=t.bottom+i,this.host.style.setProperty("--kritzel-portal-max-height",`${r}px`)):(n=8,this.host.style.setProperty("--kritzel-portal-max-height",`${o}px`)),Math.round(n+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 n=t.getRootNode();if(!(n instanceof ShadowRoot))return null;t=n.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:"72273b4c7811473072ee27668836a5ddddcfd618",style:{display:this.anchor?"block":"none"}},e("slot",{key:"b4f37ca27c47ab950a4639162fa31a3c2362d6f7"}))}static get watchers(){return{anchor:[{anchorChanged:0}]}}},Je=-1/0,Qe=1/0,ti=-1/0,ei=1/0,ii={showViewportInfo:!1,showObjectInfo:!1,showSyncProviderInfo:!0,showMigrationInfo:!0,showAssetResolverInfo:!1},ni=["general","viewport","shortcuts","developer","about"],ri=class{constructor(e){t(this,e),this.settingsChange=n(this,"settingsChange")}get host(){return r(this)}availableThemes=["light","dark"];availableLocales=[];shortcuts=[];terms={};settings;onSettingsPropChange(t){t&&this.applySettings(t)}isDialogOpen=!1;selectedCategoryId=ni[0];scaleMin=1e-4;scaleMax=1e3;lockDrawingScale=!0;theme="light";locale="en";viewportBoundaryLeft=Je;viewportBoundaryRight=Qe;viewportBoundaryTop=ti;viewportBoundaryBottom=ei;debugInfo={...ii};settingsChange;componentWillLoad(){this.settings&&this.applySettings(this.settings)}applySettings(t){"number"==typeof t.scaleMin&&(this.scaleMin=t.scaleMin),"number"==typeof t.scaleMax&&(this.scaleMax=t.scaleMax),"boolean"==typeof t.lockDrawingScale&&(this.lockDrawingScale=t.lockDrawingScale),"string"==typeof t.theme&&(this.theme=t.theme),"string"==typeof t.locale&&(this.locale=t.locale),"number"==typeof t.viewportBoundaryLeft&&(this.viewportBoundaryLeft=t.viewportBoundaryLeft),"number"==typeof t.viewportBoundaryRight&&(this.viewportBoundaryRight=t.viewportBoundaryRight),"number"==typeof t.viewportBoundaryTop&&(this.viewportBoundaryTop=t.viewportBoundaryTop),"number"==typeof t.viewportBoundaryBottom&&(this.viewportBoundaryBottom=t.viewportBoundaryBottom),t.debugInfo&&(this.debugInfo={...ii,...t.debugInfo})}emitSettings(){this.settingsChange.emit({scaleMin:this.scaleMin,scaleMax:this.scaleMax,lockDrawingScale:this.lockDrawingScale,theme:this.theme,locale:this.locale,viewportBoundaryLeft:this.viewportBoundaryLeft,viewportBoundaryRight:this.viewportBoundaryRight,viewportBoundaryTop:this.viewportBoundaryTop,viewportBoundaryBottom:this.viewportBoundaryBottom,debugInfo:this.debugInfo})}handleScaleMinChange=t=>{this.scaleMin=t.detail,this.emitSettings()};handleScaleMaxChange=t=>{this.scaleMax=t.detail,this.emitSettings()};handleLockDrawingScaleChange=t=>{this.lockDrawingScale=t.detail,this.emitSettings()};handleThemeChange=t=>{this.theme=t.detail,this.emitSettings()};handleLocaleChange=t=>{this.locale=t.detail,this.emitSettings()};handleViewportBoundaryLeftChange=t=>{this.viewportBoundaryLeft=t.detail??Je,this.emitSettings()};handleViewportBoundaryRightChange=t=>{this.viewportBoundaryRight=t.detail??Qe,this.emitSettings()};handleViewportBoundaryTopChange=t=>{this.viewportBoundaryTop=t.detail??ti,this.emitSettings()};handleViewportBoundaryBottomChange=t=>{this.viewportBoundaryBottom=t.detail??ei,this.emitSettings()};handleDebugInfoChange=t=>e=>{this.debugInfo={...this.debugInfo,[t]:e.detail},this.emitSettings()};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}t(t,e){return this.terms[t]??e}get categories(){const t={general:"settings",viewport:"viewport",shortcuts:"command",developer:"braces",about:"info"},e={general:{key:"settings.categories.general",fallback:"General"},viewport:{key:"settings.categories.viewport",fallback:"Viewport"},shortcuts:{key:"settings.categories.shortcuts",fallback:"Keyboard Shortcuts"},developer:{key:"settings.categories.developer",fallback:"Developer Options"},about:{key:"settings.categories.about",fallback:"About"}};return ni.map((i=>({id:i,label:this.t(e[i].key,e[i].fallback),icon:t[i]})))}renderCategoryContent(){switch(this.selectedCategoryId){case"general":return e("div",{class:"settings-content"},e("h3",null,this.t("settings.general.title","General Settings")),e("div",{class:"settings-group"},e("div",{class:"settings-item"},e("label",{class:"settings-label"},this.t("settings.general.theme.label","Theme")),e("p",{class:"settings-description"},this.t("settings.general.theme.description","Select a registered color theme for the editor interface.")),e("kritzel-dropdown",{options:this.availableThemes.map((t=>({value:t,label:t}))),value:this.theme,onValueChanged:this.handleThemeChange})),this.availableLocales.length>0&&e("div",{class:"settings-item"},e("label",{class:"settings-label"},this.t("settings.general.language.label","Language")),e("p",{class:"settings-description"},this.t("settings.general.language.description","Select the display language for the editor interface.")),e("kritzel-dropdown",{options:this.availableLocales.map((t=>({value:t.code,label:t.label}))),value:this.locale,onValueChanged:this.handleLocaleChange})),e("div",{class:"settings-item"},e("label",{class:"settings-label"},this.t("settings.general.lockDrawingScale.label","Lock Drawing Scale")),e("p",{class:"settings-description"},this.t("settings.general.lockDrawingScale.description","When enabled, drawn objects maintain a fixed visual size regardless of the current zoom level.")),e("kritzel-slide-toggle",{checked:this.lockDrawingScale,label:this.t("settings.general.lockDrawingScale.label","Lock Drawing Scale"),onCheckedChange:this.handleLockDrawingScaleChange}))));case"viewport":return e("div",{class:"settings-content"},e("h3",null,this.t("settings.viewport.title","Viewport Settings")),e("div",{class:"settings-group"},e("div",{class:"settings-item"},e("label",{class:"settings-label"},this.t("settings.viewport.minZoom.label","Minimum Zoom Level")),e("p",{class:"settings-description"},this.t("settings.viewport.minZoom.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"},this.t("settings.viewport.maxZoom.label","Maximum Zoom Level")),e("p",{class:"settings-description"},this.t("settings.viewport.maxZoom.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"},this.t("settings.viewport.boundaryLeft.label","Viewport Boundary Left")),e("p",{class:"settings-description"},this.t("settings.viewport.boundaryLeft.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:this.t("settings.viewport.boundaryPlaceholder","Infinite"),onValueChange:this.handleViewportBoundaryLeftChange})),e("div",{class:"settings-item"},e("label",{class:"settings-label"},this.t("settings.viewport.boundaryRight.label","Viewport Boundary Right")),e("p",{class:"settings-description"},this.t("settings.viewport.boundaryRight.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:this.t("settings.viewport.boundaryPlaceholder","Infinite"),onValueChange:this.handleViewportBoundaryRightChange})),e("div",{class:"settings-item"},e("label",{class:"settings-label"},this.t("settings.viewport.boundaryTop.label","Viewport Boundary Top")),e("p",{class:"settings-description"},this.t("settings.viewport.boundaryTop.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:this.t("settings.viewport.boundaryPlaceholder","Infinite"),onValueChange:this.handleViewportBoundaryTopChange})),e("div",{class:"settings-item"},e("label",{class:"settings-label"},this.t("settings.viewport.boundaryBottom.label","Viewport Boundary Bottom")),e("p",{class:"settings-description"},this.t("settings.viewport.boundaryBottom.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:this.t("settings.viewport.boundaryPlaceholder","Infinite"),onValueChange:this.handleViewportBoundaryBottomChange}))));case"shortcuts":return e("div",{class:"settings-content"},e("h3",null,this.t("settings.shortcuts.title","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,this.t("settings.developer.title","Developer Options")),e("div",{class:"settings-group"},e("div",{class:"settings-item"},e("label",{class:"settings-label"},this.t("settings.developer.showViewportInfo.label","Show Viewport Info")),e("p",{class:"settings-description"},this.t("settings.developer.showViewportInfo.description","Display viewport debug information such as position, zoom level, and boundaries.")),e("kritzel-slide-toggle",{checked:this.debugInfo.showViewportInfo,label:this.t("settings.developer.showViewportInfo.label","Show Viewport Info"),onCheckedChange:this.handleDebugInfoChange("showViewportInfo")})),e("div",{class:"settings-item"},e("label",{class:"settings-label"},this.t("settings.developer.showObjectInfo.label","Show Object Info")),e("p",{class:"settings-description"},this.t("settings.developer.showObjectInfo.description","Display debug information about objects on the canvas.")),e("kritzel-slide-toggle",{checked:this.debugInfo.showObjectInfo,label:this.t("settings.developer.showObjectInfo.label","Show Object Info"),onCheckedChange:this.handleDebugInfoChange("showObjectInfo")})),e("div",{class:"settings-item"},e("label",{class:"settings-label"},this.t("settings.developer.showSyncProviderInfo.label","Show Sync Provider Info")),e("p",{class:"settings-description"},this.t("settings.developer.showSyncProviderInfo.description","Display debug information about the sync provider connection status.")),e("kritzel-slide-toggle",{checked:this.debugInfo.showSyncProviderInfo,label:this.t("settings.developer.showSyncProviderInfo.label","Show Sync Provider Info"),onCheckedChange:this.handleDebugInfoChange("showSyncProviderInfo")})),e("div",{class:"settings-item"},e("label",{class:"settings-label"},this.t("settings.developer.showMigrationInfo.label","Show Migration Info")),e("p",{class:"settings-description"},this.t("settings.developer.showMigrationInfo.description","Display debug information about data migrations.")),e("kritzel-slide-toggle",{checked:this.debugInfo.showMigrationInfo,label:this.t("settings.developer.showMigrationInfo.label","Show Migration Info"),onCheckedChange:this.handleDebugInfoChange("showMigrationInfo")}))));case"about":return e("div",{class:"settings-content"},e("h3",null,this.t("settings.about.title","About")),e("p",null,this.t("settings.about.description","Kritzel - A drawing application")),e("p",{class:"version-info"},"Version ","0.3.41"),e("p",{class:"version-info"},"App-State Schema v",U),e("p",{class:"version-info"},"Workspace Schema v",V));default:return null}}render(){return e(i,{key:"7e65885051a30635291bb98fb87addf0bdbca8e8"},e("kritzel-dialog",{key:"c795bad227882904d8dda96768e8ccdd7c48df71",isOpen:this.isDialogOpen,dialogTitle:this.t("settings.dialogTitle","Settings"),size:"large",contained:!0,onDialogClose:this.closeDialog},e("kritzel-master-detail",{key:"eff1486d14d4b55441b9a52b293da7459771331d",items:this.categories,selectedItemId:this.selectedCategoryId,onItemSelect:this.handleCategorySelect},this.renderCategoryContent())))}static get watchers(){return{settings:[{onSettingsPropChange:0}]}}};ri.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 oi=class{constructor(e){t(this,e),this.valueChange=n(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:"6d38a9af2e4c4c7f86ab994c63fc074007c86b48"},e("div",{key:"cf58f26cb0e56e274873d11024209c6908d317bb",class:"fill-row"},e("button",{key:"c75eed70fe0c2fcbf0fd136bb6fce75b2dbfb45d",class:{"fill-option":!0,selected:"transparent"===this.value},onClick:()=>this.handleFillChange("transparent"),title:"Transparent background"},this.renderFillIcon("transparent")),e("button",{key:"5d6ede439b5d5e55598cd8c20b5851fb9f210463",class:{"fill-option":!0,selected:"filled"===this.value},onClick:()=>this.handleFillChange("filled"),title:"Filled background"},this.renderFillIcon("filled"))))}};oi.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%}";var si,ai,li={};function ci(){return ai?si:(ai=1,si=function(){return"function"==typeof Promise&&Promise.prototype&&Promise.prototype.then})}var hi,ui={},di={};function fi(){if(hi)return di;let t;hi=1;const e=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];return di.getSymbolSize=function(t){if(!t)throw new Error('"version" cannot be null or undefined');if(t<1||t>40)throw new Error('"version" should be in range from 1 to 40');return 4*t+17},di.getSymbolTotalCodewords=function(t){return e[t]},di.getBCHDigit=function(t){let e=0;for(;0!==t;)e++,t>>>=1;return e},di.setToSJISFunction=function(e){if("function"!=typeof e)throw new Error('"toSJISFunc" is not a valid function.');t=e},di.isKanjiModeEnabled=function(){return void 0!==t},di.toSJIS=function(e){return t(e)},di}var pi,gi,bi,vi,mi,ki={};function yi(){return pi||(pi=1,function(t){t.L={bit:1},t.M={bit:0},t.Q={bit:3},t.H={bit:2},t.isValid=function(t){return t&&void 0!==t.bit&&t.bit>=0&&t.bit<4},t.from=function(e,i){if(t.isValid(e))return e;try{return function(e){if("string"!=typeof e)throw new Error("Param is not a string");switch(e.toLowerCase()){case"l":case"low":return t.L;case"m":case"medium":return t.M;case"q":case"quartile":return t.Q;case"h":case"high":return t.H;default:throw new Error("Unknown EC Level: "+e)}}(e)}catch(t){return i}}}(ki)),ki}var wi,xi,zi,Ci,Si={},Ii={},Mi={},$i={};function Ti(){if(Ci)return $i;Ci=1;const t=yi(),e=[1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,4,1,2,4,4,2,4,4,4,2,4,6,5,2,4,6,6,2,5,8,8,4,5,8,8,4,5,8,11,4,8,10,11,4,9,12,16,4,9,16,16,6,10,12,18,6,10,17,16,6,11,16,19,6,13,18,21,7,14,21,25,8,16,20,25,8,17,23,25,9,17,23,34,9,18,25,30,10,20,27,32,12,21,29,35,12,23,34,37,12,25,34,40,13,26,35,42,14,28,38,45,15,29,40,48,16,31,43,51,17,33,45,54,18,35,48,57,19,37,51,60,19,38,53,63,20,40,56,66,21,43,59,70,22,45,62,74,24,47,65,77,25,49,68,81],i=[7,10,13,17,10,16,22,28,15,26,36,44,20,36,52,64,26,48,72,88,36,64,96,112,40,72,108,130,48,88,132,156,60,110,160,192,72,130,192,224,80,150,224,264,96,176,260,308,104,198,288,352,120,216,320,384,132,240,360,432,144,280,408,480,168,308,448,532,180,338,504,588,196,364,546,650,224,416,600,700,224,442,644,750,252,476,690,816,270,504,750,900,300,560,810,960,312,588,870,1050,336,644,952,1110,360,700,1020,1200,390,728,1050,1260,420,784,1140,1350,450,812,1200,1440,480,868,1290,1530,510,924,1350,1620,540,980,1440,1710,570,1036,1530,1800,570,1064,1590,1890,600,1120,1680,1980,630,1204,1770,2100,660,1260,1860,2220,720,1316,1950,2310,750,1372,2040,2430];return $i.getBlocksCount=function(i,n){switch(n){case t.L:return e[4*(i-1)+0];case t.M:return e[4*(i-1)+1];case t.Q:return e[4*(i-1)+2];case t.H:return e[4*(i-1)+3];default:return}},$i.getTotalCodewordsCount=function(e,n){switch(n){case t.L:return i[4*(e-1)+0];case t.M:return i[4*(e-1)+1];case t.Q:return i[4*(e-1)+2];case t.H:return i[4*(e-1)+3];default:return}},$i}var ji,Ai,Ei,_i,Oi={},Di={};var Fi,Ri={},Li={},Pi={};function Bi(){return Fi||(Fi=1,Pi.isValid=function(t){return!isNaN(t)&&t>=1&&t<=40}),Pi}var Wi,Vi,Ni,Ki={};function Ui(){if(Wi)return Ki;Wi=1;const t="[0-9]+";let e="(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+";e=e.replace(/u/g,"\\u");const i="(?:(?![A-Z0-9 $%*+\\-./:]|"+e+")(?:.|[\r\n]))+";Ki.KANJI=new RegExp(e,"g"),Ki.BYTE_KANJI=new RegExp("[^A-Z0-9 $%*+\\-./:]+","g"),Ki.BYTE=new RegExp(i,"g"),Ki.NUMERIC=new RegExp(t,"g"),Ki.ALPHANUMERIC=new RegExp("[A-Z $%*+\\-./:]+","g");const n=new RegExp("^"+e+"$"),r=new RegExp("^"+t+"$"),o=new RegExp("^[A-Z0-9 $%*+\\-./:]+$");return Ki.testKanji=function(t){return n.test(t)},Ki.testNumeric=function(t){return r.test(t)},Ki.testAlphanumeric=function(t){return o.test(t)},Ki}function Hi(){return Vi||(Vi=1,function(t){const e=Bi(),i=Ui();t.NUMERIC={id:"Numeric",bit:1,ccBits:[10,12,14]},t.ALPHANUMERIC={id:"Alphanumeric",bit:2,ccBits:[9,11,13]},t.BYTE={id:"Byte",bit:4,ccBits:[8,16,16]},t.KANJI={id:"Kanji",bit:8,ccBits:[8,10,12]},t.MIXED={bit:-1},t.getCharCountIndicator=function(t,i){if(!t.ccBits)throw new Error("Invalid mode: "+t);if(!e.isValid(i))throw new Error("Invalid version: "+i);return i>=1&&i<10?t.ccBits[0]:i<27?t.ccBits[1]:t.ccBits[2]},t.getBestModeForData=function(e){return i.testNumeric(e)?t.NUMERIC:i.testAlphanumeric(e)?t.ALPHANUMERIC:i.testKanji(e)?t.KANJI:t.BYTE},t.toString=function(t){if(t&&t.id)return t.id;throw new Error("Invalid mode")},t.isValid=function(t){return t&&t.bit&&t.ccBits},t.from=function(e,i){if(t.isValid(e))return e;try{return function(e){if("string"!=typeof e)throw new Error("Param is not a string");switch(e.toLowerCase()){case"numeric":return t.NUMERIC;case"alphanumeric":return t.ALPHANUMERIC;case"kanji":return t.KANJI;case"byte":return t.BYTE;default:throw new Error("Unknown mode: "+e)}}(e)}catch(t){return i}}}(Li)),Li}var Gi,qi,Yi,Zi,Xi,Ji,Qi,tn,en,nn,rn,on,sn={},an={},ln={exports:{}};function cn(){return nn||(nn=1,function(t){var e={single_source_shortest_paths:function(t,i,n){var r={},o={};o[i]=0;var s,a,l,c,h,u,d=e.PriorityQueue.make();for(d.push(i,0);!d.empty();)for(l in c=(s=d.pop()).cost,h=t[a=s.value]||{})h.hasOwnProperty(l)&&(u=c+h[l],(void 0===o[l]||o[l]>u)&&(o[l]=u,d.push(l,u),r[l]=a));if(void 0!==n&&void 0===o[n]){var f=["Could not find a path from ",i," to ",n,"."].join("");throw new Error(f)}return r},extract_shortest_path_from_predecessor_list:function(t,e){for(var i=[],n=e;n;)i.push(n),n=t[n];return i.reverse(),i},find_path:function(t,i,n){var r=e.single_source_shortest_paths(t,i,n);return e.extract_shortest_path_from_predecessor_list(r,n)},PriorityQueue:{make:function(t){var i,n=e.PriorityQueue,r={};for(i in t=t||{},n)n.hasOwnProperty(i)&&(r[i]=n[i]);return r.queue=[],r.sorter=t.sorter||n.default_sorter,r},default_sorter:function(t,e){return t.cost-e.cost},push:function(t,e){this.queue.push({value:t,cost:e}),this.queue.sort(this.sorter)},pop:function(){return this.queue.shift()},empty:function(){return 0===this.queue.length}}};t.exports=e}(ln)),ln.exports}function hn(){if(on)return ui;on=1;const t=fi(),e=yi(),i=function(){if(bi)return gi;function t(){this.buffer=[],this.length=0}return bi=1,t.prototype={get:function(t){const e=Math.floor(t/8);return 1==(this.buffer[e]>>>7-t%8&1)},put:function(t,e){for(let i=0;i<e;i++)this.putBit(1==(t>>>e-i-1&1))},getLengthInBits:function(){return this.length},putBit:function(t){const e=Math.floor(this.length/8);this.buffer.length<=e&&this.buffer.push(0),t&&(this.buffer[e]|=128>>>this.length%8),this.length++}},gi=t}(),n=function(){if(mi)return vi;function t(t){if(!t||t<1)throw new Error("BitMatrix size must be defined and greater than 0");this.size=t,this.data=new Uint8Array(t*t),this.reservedBit=new Uint8Array(t*t)}return mi=1,t.prototype.set=function(t,e,i,n){const r=t*this.size+e;this.data[r]=i,n&&(this.reservedBit[r]=!0)},t.prototype.get=function(t,e){return this.data[t*this.size+e]},t.prototype.xor=function(t,e,i){this.data[t*this.size+e]^=i},t.prototype.isReserved=function(t,e){return this.reservedBit[t*this.size+e]},vi=t}(),r=(wi||(wi=1,function(t){const e=fi().getSymbolSize;t.getRowColCoords=function(t){if(1===t)return[];const i=Math.floor(t/7)+2,n=e(t),r=145===n?26:2*Math.ceil((n-13)/(2*i-2)),o=[n-7];for(let t=1;t<i-1;t++)o[t]=o[t-1]-r;return o.push(6),o.reverse()},t.getPositions=function(e){const i=[],n=t.getRowColCoords(e),r=n.length;for(let t=0;t<r;t++)for(let e=0;e<r;e++)0===t&&0===e||0===t&&e===r-1||t===r-1&&0===e||i.push([n[t],n[e]]);return i}}(Si)),Si),o=function(){if(xi)return Ii;xi=1;const t=fi().getSymbolSize;return Ii.getPositions=function(e){const i=t(e);return[[0,0],[i-7,0],[0,i-7]]},Ii}(),s=(zi||(zi=1,function(t){t.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};function e(e,i,n){switch(e){case t.Patterns.PATTERN000:return(i+n)%2==0;case t.Patterns.PATTERN001:return i%2==0;case t.Patterns.PATTERN010:return n%3==0;case t.Patterns.PATTERN011:return(i+n)%3==0;case t.Patterns.PATTERN100:return(Math.floor(i/2)+Math.floor(n/3))%2==0;case t.Patterns.PATTERN101:return i*n%2+i*n%3==0;case t.Patterns.PATTERN110:return(i*n%2+i*n%3)%2==0;case t.Patterns.PATTERN111:return(i*n%3+(i+n)%2)%2==0;default:throw new Error("bad maskPattern:"+e)}}t.isValid=function(t){return null!=t&&""!==t&&!isNaN(t)&&t>=0&&t<=7},t.from=function(e){return t.isValid(e)?parseInt(e,10):void 0},t.getPenaltyN1=function(t){const e=t.size;let i=0,n=0,r=0,o=null,s=null;for(let a=0;a<e;a++){n=r=0,o=s=null;for(let l=0;l<e;l++){let e=t.get(a,l);e===o?n++:(n>=5&&(i+=n-5+3),o=e,n=1),e=t.get(l,a),e===s?r++:(r>=5&&(i+=r-5+3),s=e,r=1)}n>=5&&(i+=n-5+3),r>=5&&(i+=r-5+3)}return i},t.getPenaltyN2=function(t){const e=t.size;let i=0;for(let n=0;n<e-1;n++)for(let r=0;r<e-1;r++){const e=t.get(n,r)+t.get(n,r+1)+t.get(n+1,r)+t.get(n+1,r+1);4!==e&&0!==e||i++}return 3*i},t.getPenaltyN3=function(t){const e=t.size;let i=0,n=0,r=0;for(let o=0;o<e;o++){n=r=0;for(let s=0;s<e;s++)n=n<<1&2047|t.get(o,s),s>=10&&(1488===n||93===n)&&i++,r=r<<1&2047|t.get(s,o),s>=10&&(1488===r||93===r)&&i++}return 40*i},t.getPenaltyN4=function(t){let e=0;const i=t.data.length;for(let n=0;n<i;n++)e+=t.data[n];return 10*Math.abs(Math.ceil(100*e/i/5)-10)},t.applyMask=function(t,i){const n=i.size;for(let r=0;r<n;r++)for(let o=0;o<n;o++)i.isReserved(o,r)||i.xor(o,r,e(t,o,r))},t.getBestMask=function(e,i){const n=Object.keys(t.Patterns).length;let r=0,o=1/0;for(let s=0;s<n;s++){i(s),t.applyMask(s,e);const n=t.getPenaltyN1(e)+t.getPenaltyN2(e)+t.getPenaltyN3(e)+t.getPenaltyN4(e);t.applyMask(s,e),n<o&&(o=n,r=s)}return r}}(Mi)),Mi),a=Ti(),l=function(){if(_i)return Ei;_i=1;const t=(Ai||(Ai=1,function(t){const e=function(){if(ji)return Di;ji=1;const t=new Uint8Array(512),e=new Uint8Array(256);return function(){let i=1;for(let n=0;n<255;n++)t[n]=i,e[i]=n,i<<=1,256&i&&(i^=285);for(let e=255;e<512;e++)t[e]=t[e-255]}(),Di.log=function(t){if(t<1)throw new Error("log("+t+")");return e[t]},Di.exp=function(e){return t[e]},Di.mul=function(i,n){return 0===i||0===n?0:t[e[i]+e[n]]},Di}();t.mul=function(t,i){const n=new Uint8Array(t.length+i.length-1);for(let r=0;r<t.length;r++)for(let o=0;o<i.length;o++)n[r+o]^=e.mul(t[r],i[o]);return n},t.mod=function(t,i){let n=new Uint8Array(t);for(;n.length-i.length>=0;){const t=n[0];for(let r=0;r<i.length;r++)n[r]^=e.mul(i[r],t);let r=0;for(;r<n.length&&0===n[r];)r++;n=n.slice(r)}return n},t.generateECPolynomial=function(i){let n=new Uint8Array([1]);for(let r=0;r<i;r++)n=t.mul(n,new Uint8Array([1,e.exp(r)]));return n}}(Oi)),Oi);function e(t){this.genPoly=void 0,this.degree=t,this.degree&&this.initialize(this.degree)}return e.prototype.initialize=function(e){this.degree=e,this.genPoly=t.generateECPolynomial(this.degree)},e.prototype.encode=function(e){if(!this.genPoly)throw new Error("Encoder not initialized");const i=new Uint8Array(e.length+this.degree);i.set(e);const n=t.mod(i,this.genPoly),r=this.degree-n.length;if(r>0){const t=new Uint8Array(this.degree);return t.set(n,r),t}return n},Ei=e}(),c=(Ni||(Ni=1,function(t){const e=fi(),i=Ti(),n=yi(),r=Hi(),o=Bi(),s=e.getBCHDigit(7973);function a(t,e){return r.getCharCountIndicator(t,e)+4}function l(t,e){let i=0;return t.forEach((function(t){const n=a(t.mode,e);i+=n+t.getBitsLength()})),i}t.from=function(t,e){return o.isValid(t)?parseInt(t,10):e},t.getCapacity=function(t,n,s){if(!o.isValid(t))throw new Error("Invalid QR Code version");void 0===s&&(s=r.BYTE);const l=8*(e.getSymbolTotalCodewords(t)-i.getTotalCodewordsCount(t,n));if(s===r.MIXED)return l;const c=l-a(s,t);switch(s){case r.NUMERIC:return Math.floor(c/10*3);case r.ALPHANUMERIC:return Math.floor(c/11*2);case r.KANJI:return Math.floor(c/13);default:return Math.floor(c/8)}},t.getBestVersionForData=function(e,i){let o;const s=n.from(i,n.M);if(Array.isArray(e)){if(e.length>1)return function(e,i){for(let n=1;n<=40;n++)if(l(e,n)<=t.getCapacity(n,i,r.MIXED))return n}(e,s);if(0===e.length)return 1;o=e[0]}else o=e;return function(e,i,n){for(let r=1;r<=40;r++)if(i<=t.getCapacity(r,n,e))return r}(o.mode,o.getLength(),s)},t.getEncodedBits=function(t){if(!o.isValid(t)||t<7)throw new Error("Invalid QR Code version");let i=t<<12;for(;e.getBCHDigit(i)-s>=0;)i^=7973<<e.getBCHDigit(i)-s;return t<<12|i}}(Ri)),Ri),h=function(){if(Gi)return sn;Gi=1;const t=fi(),e=t.getBCHDigit(1335);return sn.getEncodedBits=function(i,n){const r=i.bit<<3|n;let o=r<<10;for(;t.getBCHDigit(o)-e>=0;)o^=1335<<t.getBCHDigit(o)-e;return 21522^(r<<10|o)},sn}(),u=Hi(),d=(rn||(rn=1,function(t){const e=Hi(),i=function(){if(Yi)return qi;Yi=1;const t=Hi();function e(e){this.mode=t.NUMERIC,this.data=e.toString()}return e.getBitsLength=function(t){return 10*Math.floor(t/3)+(t%3?t%3*3+1:0)},e.prototype.getLength=function(){return this.data.length},e.prototype.getBitsLength=function(){return e.getBitsLength(this.data.length)},e.prototype.write=function(t){let e,i,n;for(e=0;e+3<=this.data.length;e+=3)i=this.data.substr(e,3),n=parseInt(i,10),t.put(n,10);const r=this.data.length-e;r>0&&(i=this.data.substr(e),n=parseInt(i,10),t.put(n,3*r+1))},qi=e}(),n=function(){if(Xi)return Zi;Xi=1;const t=Hi(),e=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"," ","$","%","*","+","-",".","/",":"];function i(e){this.mode=t.ALPHANUMERIC,this.data=e}return i.getBitsLength=function(t){return 11*Math.floor(t/2)+t%2*6},i.prototype.getLength=function(){return this.data.length},i.prototype.getBitsLength=function(){return i.getBitsLength(this.data.length)},i.prototype.write=function(t){let i;for(i=0;i+2<=this.data.length;i+=2){let n=45*e.indexOf(this.data[i]);n+=e.indexOf(this.data[i+1]),t.put(n,11)}this.data.length%2&&t.put(e.indexOf(this.data[i]),6)},Zi=i}(),r=function(){if(Qi)return Ji;Qi=1;const t=Hi();function e(e){this.mode=t.BYTE,this.data="string"==typeof e?(new TextEncoder).encode(e):new Uint8Array(e)}return e.getBitsLength=function(t){return 8*t},e.prototype.getLength=function(){return this.data.length},e.prototype.getBitsLength=function(){return e.getBitsLength(this.data.length)},e.prototype.write=function(t){for(let e=0,i=this.data.length;e<i;e++)t.put(this.data[e],8)},Ji=e}(),o=function(){if(en)return tn;en=1;const t=Hi(),e=fi();function i(e){this.mode=t.KANJI,this.data=e}return i.getBitsLength=function(t){return 13*t},i.prototype.getLength=function(){return this.data.length},i.prototype.getBitsLength=function(){return i.getBitsLength(this.data.length)},i.prototype.write=function(t){let i;for(i=0;i<this.data.length;i++){let n=e.toSJIS(this.data[i]);if(n>=33088&&n<=40956)n-=33088;else{if(!(n>=57408&&n<=60351))throw new Error("Invalid SJIS character: "+this.data[i]+"\nMake sure your charset is UTF-8");n-=49472}n=192*(n>>>8&255)+(255&n),t.put(n,13)}},tn=i}(),s=Ui(),a=fi(),l=cn();function c(t){return unescape(encodeURIComponent(t)).length}function h(t,e,i){const n=[];let r;for(;null!==(r=t.exec(i));)n.push({data:r[0],index:r.index,mode:e,length:r[0].length});return n}function u(t){const i=h(s.NUMERIC,e.NUMERIC,t),n=h(s.ALPHANUMERIC,e.ALPHANUMERIC,t);let r,o;return a.isKanjiModeEnabled()?(r=h(s.BYTE,e.BYTE,t),o=h(s.KANJI,e.KANJI,t)):(r=h(s.BYTE_KANJI,e.BYTE,t),o=[]),i.concat(n,r,o).sort((function(t,e){return t.index-e.index})).map((function(t){return{data:t.data,mode:t.mode,length:t.length}}))}function d(t,s){switch(s){case e.NUMERIC:return i.getBitsLength(t);case e.ALPHANUMERIC:return n.getBitsLength(t);case e.KANJI:return o.getBitsLength(t);case e.BYTE:return r.getBitsLength(t)}}function f(t,s){let l;const c=e.getBestModeForData(t);if(l=e.from(s,c),l!==e.BYTE&&l.bit<c.bit)throw new Error('"'+t+'" cannot be encoded with mode '+e.toString(l)+".\n Suggested mode is: "+e.toString(c));switch(l!==e.KANJI||a.isKanjiModeEnabled()||(l=e.BYTE),l){case e.NUMERIC:return new i(t);case e.ALPHANUMERIC:return new n(t);case e.KANJI:return new o(t);case e.BYTE:return new r(t)}}t.fromArray=function(t){return t.reduce((function(t,e){return"string"==typeof e?t.push(f(e,null)):e.data&&t.push(f(e.data,e.mode)),t}),[])},t.fromString=function(i,n){const r=function(t,i){const n={},r={start:{}};let o=["start"];for(let s=0;s<t.length;s++){const a=t[s],l=[];for(let t=0;t<a.length;t++){const c=a[t],h=""+s+t;l.push(h),n[h]={node:c,lastCount:0},r[h]={};for(let t=0;t<o.length;t++){const s=o[t];n[s]&&n[s].node.mode===c.mode?(r[s][h]=d(n[s].lastCount+c.length,c.mode)-d(n[s].lastCount,c.mode),n[s].lastCount+=c.length):(n[s]&&(n[s].lastCount=c.length),r[s][h]=d(c.length,c.mode)+4+e.getCharCountIndicator(c.mode,i))}}o=l}for(let t=0;t<o.length;t++)r[o[t]].end=0;return{map:r,table:n}}(function(t){const i=[];for(let n=0;n<t.length;n++){const r=t[n];switch(r.mode){case e.NUMERIC:i.push([r,{data:r.data,mode:e.ALPHANUMERIC,length:r.length},{data:r.data,mode:e.BYTE,length:r.length}]);break;case e.ALPHANUMERIC:i.push([r,{data:r.data,mode:e.BYTE,length:r.length}]);break;case e.KANJI:i.push([r,{data:r.data,mode:e.BYTE,length:c(r.data)}]);break;case e.BYTE:i.push([{data:r.data,mode:e.BYTE,length:c(r.data)}])}}return i}(u(i,a.isKanjiModeEnabled())),n),o=l.find_path(r.map,"start","end"),s=[];for(let t=1;t<o.length-1;t++)s.push(r.table[o[t]].node);return t.fromArray(s.reduce((function(t,e){const i=t.length-1>=0?t[t.length-1]:null;return i&&i.mode===e.mode?(t[t.length-1].data+=e.data,t):(t.push(e),t)}),[]))},t.rawSplit=function(e){return t.fromArray(u(e,a.isKanjiModeEnabled()))}}(an)),an);function f(t,e,i){const n=t.size,r=h.getEncodedBits(e,i);let o,s;for(o=0;o<15;o++)s=1==(r>>o&1),t.set(o<6?o:o<8?o+1:n-15+o,8,s,!0),t.set(8,o<8?n-o-1:o<9?15-o-1+1:15-o-1,s,!0);t.set(n-8,8,1,!0)}function p(e,h,p,g){let b;if(Array.isArray(e))b=d.fromArray(e);else{if("string"!=typeof e)throw new Error("Invalid data");{let t=h;if(!t){const i=d.rawSplit(e);t=c.getBestVersionForData(i,p)}b=d.fromString(e,t||40)}}const v=c.getBestVersionForData(b,p);if(!v)throw new Error("The amount of data is too big to be stored in a QR Code");if(h){if(h<v)throw new Error("\nThe chosen QR Code version cannot contain this amount of data.\nMinimum version required to store current data is: "+v+".\n")}else h=v;const m=function(e,n,r){const o=new i;r.forEach((function(t){o.put(t.mode.bit,4),o.put(t.getLength(),u.getCharCountIndicator(t.mode,e)),t.write(o)}));const s=8*(t.getSymbolTotalCodewords(e)-a.getTotalCodewordsCount(e,n));for(o.getLengthInBits()+4<=s&&o.put(0,4);o.getLengthInBits()%8!=0;)o.putBit(0);const c=(s-o.getLengthInBits())/8;for(let t=0;t<c;t++)o.put(t%2?17:236,8);return function(e,i,n){const r=t.getSymbolTotalCodewords(i),o=r-a.getTotalCodewordsCount(i,n),s=a.getBlocksCount(i,n),c=s-r%s,h=Math.floor(r/s),u=Math.floor(o/s),d=u+1,f=h-u,p=new l(f);let g=0;const b=new Array(s),v=new Array(s);let m=0;const k=new Uint8Array(e.buffer);for(let t=0;t<s;t++){const e=t<c?u:d;b[t]=k.slice(g,g+e),v[t]=p.encode(b[t]),g+=e,m=Math.max(m,e)}const y=new Uint8Array(r);let w,x,z=0;for(w=0;w<m;w++)for(x=0;x<s;x++)w<b[x].length&&(y[z++]=b[x][w]);for(w=0;w<f;w++)for(x=0;x<s;x++)y[z++]=v[x][w];return y}(o,e,n)}(h,p,b),k=t.getSymbolSize(h),y=new n(k);return function(t,e){const i=t.size,n=o.getPositions(e);for(let e=0;e<n.length;e++){const r=n[e][0],o=n[e][1];for(let e=-1;e<=7;e++)if(!(r+e<=-1||i<=r+e))for(let n=-1;n<=7;n++)o+n<=-1||i<=o+n||t.set(r+e,o+n,e>=0&&e<=6&&(0===n||6===n)||n>=0&&n<=6&&(0===e||6===e)||e>=2&&e<=4&&n>=2&&n<=4,!0)}}(y,h),function(t){const e=t.size;for(let i=8;i<e-8;i++){const e=i%2==0;t.set(i,6,e,!0),t.set(6,i,e,!0)}}(y),function(t,e){const i=r.getPositions(e);for(let e=0;e<i.length;e++){const n=i[e][0],r=i[e][1];for(let e=-2;e<=2;e++)for(let i=-2;i<=2;i++)t.set(n+e,r+i,-2===e||2===e||-2===i||2===i||0===e&&0===i,!0)}}(y,h),f(y,p,0),h>=7&&function(t,e){const i=t.size,n=c.getEncodedBits(e);let r,o,s;for(let e=0;e<18;e++)r=Math.floor(e/3),o=e%3+i-8-3,s=1==(n>>e&1),t.set(r,o,s,!0),t.set(o,r,s,!0)}(y,h),function(t,e){const i=t.size;let n=-1,r=i-1,o=7,s=0;for(let a=i-1;a>0;a-=2)for(6===a&&a--;;){for(let i=0;i<2;i++)if(!t.isReserved(r,a-i)){let n=!1;s<e.length&&(n=1==(e[s]>>>o&1)),t.set(r,a-i,n),o--,-1===o&&(s++,o=7)}if(r+=n,r<0||i<=r){r-=n,n=-n;break}}}(y,m),isNaN(g)&&(g=s.getBestMask(y,f.bind(null,y,p))),s.applyMask(g,y),f(y,p,g),{modules:y,version:h,errorCorrectionLevel:p,maskPattern:g,segments:b}}return ui.create=function(i,n){if(void 0===i||""===i)throw new Error("No input text");let r,o,a=e.M;return void 0!==n&&(a=e.from(n.errorCorrectionLevel,e.M),r=c.from(n.version),o=s.from(n.maskPattern),n.toSJISFunc&&t.setToSJISFunction(n.toSJISFunc)),p(i,r,a,o)},ui}var un,dn,fn={},pn={};function gn(){return un||(un=1,function(t){function e(t){if("number"==typeof t&&(t=t.toString()),"string"!=typeof t)throw new Error("Color should be defined as hex string");let e=t.slice().replace("#","").split("");if(e.length<3||5===e.length||e.length>8)throw new Error("Invalid hex color: "+t);3!==e.length&&4!==e.length||(e=Array.prototype.concat.apply([],e.map((function(t){return[t,t]})))),6===e.length&&e.push("F","F");const i=parseInt(e.join(""),16);return{r:i>>24&255,g:i>>16&255,b:i>>8&255,a:255&i,hex:"#"+e.slice(0,6).join("")}}t.getOptions=function(t){t||(t={}),t.color||(t.color={});const i=t.width&&t.width>=21?t.width:void 0;return{width:i,scale:i?4:t.scale||4,margin:null==t.margin||t.margin<0?4:t.margin,color:{dark:e(t.color.dark||"#000000ff"),light:e(t.color.light||"#ffffffff")},type:t.type,rendererOpts:t.rendererOpts||{}}},t.getScale=function(t,e){return e.width&&e.width>=t+2*e.margin?e.width/(t+2*e.margin):e.scale},t.getImageWidth=function(e,i){const n=t.getScale(e,i);return Math.floor((e+2*i.margin)*n)},t.qrToImageData=function(e,i,n){const r=i.modules.size,o=i.modules.data,s=t.getScale(r,n),a=Math.floor((r+2*n.margin)*s),l=n.margin*s,c=[n.color.light,n.color.dark];for(let t=0;t<a;t++)for(let i=0;i<a;i++){let h=4*(t*a+i),u=n.color.light;t>=l&&i>=l&&t<a-l&&i<a-l&&(u=c[o[Math.floor((t-l)/s)*r+Math.floor((i-l)/s)]?1:0]),e[h++]=u.r,e[h++]=u.g,e[h++]=u.b,e[h]=u.a}}}(pn)),pn}var bn,vn,mn={};var kn=function(){if(vn)return li;vn=1;const t=ci(),e=hn(),i=(dn||(dn=1,function(t){const e=gn();t.render=function(t,i,n){let r=n,o=i;void 0!==r||i&&i.getContext||(r=i,i=void 0),i||(o=function(){try{return document.createElement("canvas")}catch(t){throw new Error("You need to specify a canvas element")}}()),r=e.getOptions(r);const s=e.getImageWidth(t.modules.size,r),a=o.getContext("2d"),l=a.createImageData(s,s);return e.qrToImageData(l.data,t,r),function(t,e,i){t.clearRect(0,0,e.width,e.height),e.style||(e.style={}),e.height=i,e.width=i,e.style.height=i+"px",e.style.width=i+"px"}(a,o,s),a.putImageData(l,0,0),o},t.renderToDataURL=function(e,i,n){let r=n;return void 0!==r||i&&i.getContext||(r=i,i=void 0),r||(r={}),t.render(e,i,r).toDataURL(r.type||"image/png",(r.rendererOpts||{}).quality)}}(fn)),fn),n=function(){if(bn)return mn;bn=1;const t=gn();function e(t,e){const i=t.a/255,n=e+'="'+t.hex+'"';return i<1?n+" "+e+'-opacity="'+i.toFixed(2).slice(1)+'"':n}function i(t,e,i){let n=t+e;return void 0!==i&&(n+=" "+i),n}return mn.render=function(n,r,o){const s=t.getOptions(r),a=n.modules.size,l=n.modules.data,c=a+2*s.margin,h=s.color.light.a?"<path "+e(s.color.light,"fill")+' d="M0 0h'+c+"v"+c+'H0z"/>':"",u="<path "+e(s.color.dark,"stroke")+' d="'+function(t,e,n){let r="",o=0,s=!1,a=0;for(let l=0;l<t.length;l++){const c=Math.floor(l%e),h=Math.floor(l/e);c||s||(s=!0),t[l]?(a++,l>0&&c>0&&t[l-1]||(r+=s?i("M",c+n,.5+h+n):i("m",o,0),o=0,s=!1),c+1<e&&t[l+1]||(r+=i("h",a),a=0)):o++}return r}(l,a,s.margin)+'"/>',d='<svg xmlns="http://www.w3.org/2000/svg" '+(s.width?'width="'+s.width+'" height="'+s.width+'" ':"")+'viewBox="0 0 '+c+" "+c+'" shape-rendering="crispEdges">'+h+u+"</svg>\n";return"function"==typeof o&&o(null,d),d},mn}();function r(i,n,r,o,s){const a=[].slice.call(arguments,1),l=a.length,c="function"==typeof a[l-1];if(!c&&!t())throw new Error("Callback required as last argument");if(!c){if(l<1)throw new Error("Too few arguments provided");return 1===l?(r=n,n=o=void 0):2!==l||n.getContext||(o=r,r=n,n=void 0),new Promise((function(t,s){try{const s=e.create(r,o);t(i(s,n,o))}catch(t){s(t)}}))}if(l<2)throw new Error("Too few arguments provided");2===l?(s=r,r=n,n=o=void 0):3===l&&(n.getContext&&void 0===s?(s=o,o=void 0):(s=o,o=r,r=n,n=void 0));try{const t=e.create(r,o);s(null,i(t,n,o))}catch(t){s(t)}}return li.create=e.create,li.toCanvas=r.bind(null,i.render),li.toDataURL=r.bind(null,i.renderToDataURL),li.toString=r.bind(null,(function(t,e,i){return n.render(t,i)})),li}(),yn=rt(kn);const wn=class{constructor(e){t(this,e),this.toggleIsPublic=n(this,"toggleIsPublic"),this.dialogClosed=n(this,"dialogClosed")}get host(){return r(this)}isPublic=!1;workspaceId=void 0;terms={};onIsPublicChange(t){this.internalIsPublic=t,this.updateQrCodeDataUrl()}onWorkspaceIdChange(){this.updateQrCodeDataUrl()}isDialogOpen=!1;internalIsPublic=!1;copySuccess=!1;qrCodeDataUrl="";qrCodeUpdateSequence=0;toggleIsPublic;dialogClosed;async open(){this.internalIsPublic=this.isPublic,this.isDialogOpen=!0,await this.updateQrCodeDataUrl()}async close(){this.isDialogOpen=!1}handleToggleChange=t=>{const e=t.detail;this.internalIsPublic=e,this.updateQrCodeDataUrl(),this.toggleIsPublic.emit(e)};async updateQrCodeDataUrl(){if(!this.internalIsPublic)return void(this.qrCodeDataUrl="");const t=this.getShareUrl();if(!t)return void(this.qrCodeDataUrl="");const e=++this.qrCodeUpdateSequence;try{const i=await yn.toDataURL(t,{margin:1,width:180});if(e!==this.qrCodeUpdateSequence)return;this.qrCodeDataUrl=i}catch{if(e!==this.qrCodeUpdateSequence)return;this.qrCodeDataUrl=""}}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:"b96c4cc6a9e4778715f496574f307a540285f70c"},e("kritzel-dialog",{key:"9a9cead56cc50042f59f677c0a846fc9fff01a8b",dialogTitle:this.terms["share.dialogTitle"]??"Share Workspace",size:"small",isOpen:this.isDialogOpen,onDialogClose:this.closeDialog,contained:!0},e("div",{key:"f1ffe37126343d84f9cb70f85530596d594c6e04",class:"share-content"},e("div",{key:"e1b20fccdb127eb30d240a2812742977b6512113",class:"share-section"},e("div",{key:"fb0d4226d638309fd5696dace0cc0c73d82150fc",class:"share-row"},e("div",{key:"301a27b975bb63610d94e1140aef39aa0594dda6",class:"share-label-group"},e("label",{key:"acf694843423d42414951ae88ec7eee541dd8f7f",class:"share-label"},this.terms["share.linkSharing.label"]??"Link sharing"),e("p",{key:"4c29b6448a27c69fceadb4166bc878216010475f",class:"share-description"},this.internalIsPublic?this.terms["share.linkSharing.enabledDescription"]??"Anyone with the link can access this workspace.":this.terms["share.linkSharing.disabledDescription"]??"Link sharing is disabled. Only you can access this workspace.")),e("kritzel-slide-toggle",{key:"c813213e7cf53125993de209e15c921779c019b6",checked:this.internalIsPublic,onCheckedChange:this.handleToggleChange,label:this.terms["share.linkSharing.toggleLabel"]??"Enable link sharing"}))),this.internalIsPublic&&e("div",{key:"af32cbadc775ce4ca3c79bdc0f8b4351c8723b28",class:"share-section"},e("div",{key:"d5c4e2b8a77306a141cc73c37dc6c57b1dc9daa5",class:"share-url-container"},e("input",{key:"f2f364c3fabd7f693247f5ad05594bd089a194ea",type:"text",class:"share-url-input",value:this.getShareUrl(),readOnly:!0,onClick:t=>t.target.select()}),e("button",{key:"d27a6f00e6b14bff3f4c8d1694cc8a38eebc5ec0",class:{"copy-button":!0,"copy-success":this.copySuccess},onClick:this.handleCopyUrl,title:this.copySuccess?this.terms["share.copyLink.copied"]??"Copied!":this.terms["share.copyLink.title"]??"Copy link"},e("kritzel-icon",{key:"60c72ee8d789dc14baa4c169f70c78837b0cbd0c",name:this.copySuccess?"check":"copy",size:18}))),this.qrCodeDataUrl&&e("div",{key:"f5d361b7ed145ab5f4f7b89f9c63046ce831220b",class:"share-qr-container"},e("img",{key:"5f2d4650dffab907f5a53dfb2fd4c337da3e51ee",class:"share-qr-image",src:this.qrCodeDataUrl,alt:"QR code for share link"}))))))}static get watchers(){return{isPublic:[{onIsPublicChange:0}],workspaceId:[{onWorkspaceIdChange:0}]}}};wn.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-qr-container{display:flex;justify-content:center;margin-top:16px;margin-bottom:16px}.share-qr-image{width:180px;height:180px;border-radius:8px;border:1px solid var(--kritzel-share-dialog-qr-border-color, #e0e0e0);background:var(--kritzel-share-dialog-qr-background, #ffffff);padding:8px;box-sizing:border-box}.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 xn=class{constructor(e){t(this,e),this.checkedChange=n(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:"00160c9cfdafa0d53f3acfb1fb235b29abf2622a",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:"385008948ffbdc0f26249d2d833aae8f04eeb6a0",class:"toggle-track"},e("div",{key:"43929e94335589feb24ee45f1c34a270653dd412",class:"toggle-thumb"})))}};xn.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 zn=class{constructor(e){t(this,e),this.mainButtonClick=n(this,"mainButtonClick"),this.itemSelect=n(this,"itemSelect"),this.itemSave=n(this,"itemSave"),this.itemCancel=n(this,"itemCancel"),this.itemToggleChildMenu=n(this,"itemToggleChildMenu"),this.itemCloseChildMenu=n(this,"itemCloseChildMenu"),this.menuOpen=n(this,"menuOpen"),this.menuClose=n(this,"menuClose")}get host(){return r(this)}buttonIcon="plus";dropdownIcon="chevron-down";items=[];mainButtonDisabled=!1;menuButtonDisabled=!1;mainButtonClick;itemSelect;itemSave;itemCancel;itemToggleChildMenu;itemCloseChildMenu;menuOpen;menuClose;isMenuOpen=!1;isTouchDevice=l.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:"fa22dc1185ef07d8127d9ee9f6dbe482d126f934",class:{mobile:this.isTouchDevice}},e("button",{key:"a48aba702b70e9b24ad5486dde61fa9f9c8f7cdc",class:"split-main-button",tabIndex:0,onClick:this.handleButtonClick,disabled:this.mainButtonDisabled,"aria-label":"Main action"},this.buttonIcon&&e("kritzel-icon",{key:"0d1c9a3e9f744541dd6ebe491105f6ee65233543",name:this.buttonIcon})),e("div",{key:"c9db29f0b9c9cf1974d78f4f60be9e1b0e26c5d2",class:"split-divider"}),e("button",{key:"57addfd5228b7c7668be902c53683d12c976b89b",ref:t=>this.splitMenuButtonRef=t,class:"split-menu-button",tabIndex:0,onClick:this.toggleMenu,disabled:this.menuButtonDisabled,"aria-label":"Open menu"},e("kritzel-icon",{key:"d860cc503043425860b1234b5d34693bfdd1d5ab",name:this.dropdownIcon})),e("kritzel-portal",{key:"cd6dda8869aea4205d922fc639073019bbd2b102",anchor:this.anchorElement,offsetY:4,onClose:this.closeMenu},e("kritzel-menu",{key:"1ef1c2b319662e7a2af15b46362addcc75bceb68",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})))}};zn.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 Cn=class{constructor(e){t(this,e),this.sizeChange=n(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:"ba181d798d2bf7b60308746635d2077ce1353b83"},e("div",{key:"048fc8934190359b9337747567844ca88925a6ce",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}))))))}};Cn.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(auto-fill, 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 Sn=class{constructor(e){t(this,e),this.toolChange=n(this,"toolChange"),this.displayValuesChange=n(this,"displayValuesChange")}tool;handleToolChange(t,e){const i=ft.getToolConfig(t);if(e&&t&&"shape"===i?.type){const n=ft.getToolConfig(e);"shape"===n?.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.updateSizes(),this.currentOpacity=t[this.config.opacityProperty]??1,this.emitDisplayValues())}isExpanded=!1;theme;engine;terms={};handleSelectionChangeBound=this.handleSelectionChange.bind(this);onThemeChange(){this.emitDisplayValues()}handleEngineChange(t,e){e&&e.removeEventListener("objectsSelectionChange",this.handleSelectionChangeBound),t&&t.addEventListener("objectsSelectionChange",this.handleSelectionChangeBound)}toolChange;displayValuesChange;config;palette=[];sizes=[];currentOpacity=1;updateTrigger=0;handleSelectionChange(){this.tool instanceof c&&(this.config=ft.getToolConfig(this.tool),this.config&&(this.updatePalette(),this.updateSizes(),this.currentOpacity=this.tool[this.config.opacityProperty]??1,this.emitDisplayValues()))}disconnectedCallback(){this.engine&&this.engine.removeEventListener("objectsSelectionChange",this.handleSelectionChangeBound)}componentWillLoad(){this.config=ft.getToolConfig(this.tool),this.config&&(this.updatePalette(),this.updateSizes(),this.currentOpacity=this.tool[this.config.opacityProperty]??1,this.emitDisplayValues()),this.engine&&this.engine.addEventListener("objectsSelectionChange",this.handleSelectionChangeBound)}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 h&&(e.fontFamily=this.tool.fontFamily),this.displayValuesChange.emit(e)}updatePalette(){this.config&&(this.palette="none"===this.config.paletteSource?[]:this.tool.palette||[])}updateSizes(){this.config&&(this.sizes="none"===this.config.sizesSource?[]:this.tool.sizes||[])}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,sizes:this.sizes,selectedSize:i,onSizeChange:this.handleSizeChange});case"font-size":return e("kritzel-font-size",{key:t.type,sizes:this.sizes,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,n=this.palette.length>0,r=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"}},n&&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}),r&&this.renderControl(r),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?this.terms["toolConfig.collapse"]??"Collapse":this.terms["toolConfig.expand"]??"Expand"},e("kritzel-icon",{name:this.isExpanded?"chevron-up":"chevron-down"})))))}static get watchers(){return{tool:[{handleToolChange:0}],theme:[{onThemeChange:0}],engine:[{handleEngineChange:0}]}}};Sn.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 In=class{constructor(e){t(this,e),this.tooltipClosed=n(this,"tooltipClosed"),this.tooltipOpened=n(this,"tooltipOpened")}get host(){return r(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)),n=this.triggerElement&&e.some((t=>t===this.triggerElement));i||n||this.close()}handleOutsidePointerDown(t){if(!this.isVisible)return;const e=t.composedPath(),i=e.some((t=>t===this.host)),n=this.triggerElement&&e.some((t=>t===this.triggerElement));i||n||(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=d.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(),n=i?.width||0,r=12,o=window.innerWidth-n-r;this.positionX=Math.max(r,Math.min(t.left+t.width/2-n/2,o)),this.positionY=window.innerHeight-t.top+this.offsetY}}render(){return e(i,{key:"1e318ff48b72ae5e0853a92c61fd4174d6e45271",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:"c66c9978787c59de6ca29944f666354fed2ab4c3",class:"tooltip-content",onClick:t=>t.stopPropagation(),onPointerDown:t=>t.stopPropagation(),onMouseDown:t=>t.stopPropagation()},e("slot",{key:"664e78076bb988b0829b805aad4393c443db2dc7"})))}static get watchers(){return{triggerElement:[{handleTriggerElementChange:0}],isVisible:[{handleVisibilityChange:0}]}}};In.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 Mn=class{constructor(e){t(this,e),this.undo=n(this,"undo"),this.redo=n(this,"redo"),this.delete=n(this,"delete")}undoState=null;terms={};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:"90b96b2f4693016650394e085c1ccf5c61759713"},e("button",{key:"325e3a869061ce7fda2d86e74250f4ea7414da8e",class:"utility-button","data-testid":"utility-undo",disabled:!this.undoState?.canUndo,onClick:t=>this.handleUndo(t),"aria-label":this.terms["utility.undo"]??"Undo"},e("kritzel-icon",{key:"70335427bc3a9a54a994ad22935bde4010d8f96b",name:"undo"})),e("button",{key:"cf3000675d594ffe64f947b57e5aabe084be32a7",class:"utility-button","data-testid":"utility-redo",disabled:!this.undoState?.canRedo,onClick:t=>this.handleRedo(t),"aria-label":this.terms["utility.redo"]??"Redo"},e("kritzel-icon",{key:"b33336374abb36a7cdb685fb970805ec1f4073e2",name:"redo"})),e("div",{key:"34323fd33574ba65c825687fec5b772facbd2c62",class:"utility-separator"}),e("button",{key:"aff157ab166ed15b8f9172b5b63f62996ed51c6e",class:"utility-button","data-testid":"utility-delete",onClick:()=>this.delete.emit(),"aria-label":this.terms["utility.delete"]??"Delete selected items"},e("kritzel-icon",{key:"413104d9d493fc47ad5ae8e61af514dfd530f6ee",name:"delete"})))}};Mn.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:1}.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 $n=class{constructor(e){t(this,e)}core;label;render(){const t=this.label??this.core.localizationManager.translate("watermark.poweredBy");return e(i,{key:"0eccc75e51c7ac199e23d8f3a871593f1fb65a17"},e("a",{key:"2029f8b56ba8609ca621447eac0df9d30ebfbbbe",class:"watermark-link",href:"https://kritzel.io",target:"_blank",rel:"noopener noreferrer",part:"watermark",onPointerDown:t=>t.stopPropagation(),onPointerUp:t=>t.stopPropagation()},t))}};$n.style=":host{position:absolute;bottom:var(--kritzel-watermark-offset-bottom, 12px);right:var(--kritzel-watermark-offset-right, 12px);z-index:10000;pointer-events:none}.watermark-link{pointer-events:auto;display:inline-flex;align-items:center;padding:4px 8px;border-radius:var(--kritzel-watermark-border-radius, 6px);font-family:var(--kritzel-font-family, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif);font-size:var(--kritzel-watermark-font-size, 11px);line-height:1;text-decoration:none;color:var(--kritzel-watermark-color, rgba(60, 60, 60, 0.75));background-color:var(--kritzel-watermark-background, rgba(255, 255, 255, 0.6));box-shadow:var(--kritzel-watermark-box-shadow, 0 1px 2px rgba(0, 0, 0, 0.12));opacity:var(--kritzel-watermark-opacity, 0.85);transition:opacity 150ms ease;user-select:none}.watermark-link:hover{opacity:1}";const Tn=class{constructor(e){t(this,e),this.isWorkspaceManagerReady=n(this,"isWorkspaceManagerReady"),this.workspaceChange=n(this,"workspaceChange")}get host(){return r(this)}visible=!1;activeWorkspace;workspaces=[];terms={};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 D(I.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?this.terms["workspace.sharedTooltip"]??"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:this.terms["workspace.rename"]??"Rename",value:"rename",action:(t,e)=>this.edit(e)},{id:`${t.id}-delete`,label:this.terms["workspace.delete"]??"Delete",value:"delete",isDisabled:this.sortedWorkspaces.length<=1,action:(t,e)=>this.delete(e)}]})));return e(i,{style:{display:this.visible?"":"none"}},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()})))}};Tn.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}";const jn=class{constructor(e){t(this,e),this.zoomIn=n(this,"zoomIn"),this.zoomOut=n(this,"zoomOut")}visible=!0;disabled=!1;zoomPercent=100;terms={};zoomIn;zoomOut;handleZoomIn=()=>{this.disabled||this.zoomIn.emit()};handleZoomOut=()=>{this.disabled||this.zoomOut.emit()};get normalizedZoomPercent(){return Number.isFinite(this.zoomPercent)?Math.max(1,Math.round(this.zoomPercent)):100}render(){return e(i,{key:"56b65a376d4bd94553416e07f2621192c4457bc2"},e("div",{key:"bdbfea3b3ee7e37eeb5c5f03388eb92ed8af9962",class:{panel:!0,visible:this.visible}},e("button",{key:"de5ad152aaf7965f731bee95170b67e62af94ea2",class:"zoom-button",type:"button","aria-label":this.terms["zoom.zoomOut"]??"Zoom out",disabled:this.disabled,onClick:this.handleZoomOut},e("kritzel-icon",{key:"104eb632666c55c032a40e6df2097aaa643fd23b",name:"minus"})),e("span",{key:"d601b324e26a6c2737138b8f151b13dcdb2d20ab",class:"zoom-level","aria-live":"polite"},this.normalizedZoomPercent,"%"),e("button",{key:"c976d03c69978f2d5cedf2a94b38419ed81088f6",class:"zoom-button",type:"button","aria-label":this.terms["zoom.zoomIn"]??"Zoom in",disabled:this.disabled,onClick:this.handleZoomIn},e("kritzel-icon",{key:"844105bd53f3307425789aa6baf0ac3c25407414",name:"plus"}))))}};jn.style=":host{display:block;z-index:1}.panel{display:flex;flex-direction:row;align-items:center;gap:var(--kritzel-zoom-panel-gap, 4px);padding:var(--kritzel-zoom-panel-padding, 4px);border:var(--kritzel-zoom-panel-border, 1px solid #ebebeb);border-radius:var(--kritzel-zoom-panel-border-radius, 12px);background-color:var(--kritzel-zoom-panel-background-color, #ffffff);box-shadow:var(--kritzel-zoom-panel-box-shadow, 0 0 3px rgba(0, 0, 0, 0.08));opacity:0;pointer-events:none;transition:opacity 0.2s ease-out}.panel.visible{opacity:1;pointer-events:auto}.zoom-level{display:inline-flex;align-items:center;justify-content:center;min-width:46px;color:var(--kritzel-zoom-panel-icon-color, #000000);font-family:var(--kritzel-font-family, sans-serif);font-size:12px;font-weight:500;line-height:1;padding:0 4px;user-select:none}.zoom-button{display:flex;align-items:center;justify-content:center;width:var(--kritzel-zoom-panel-button-size, 32px);height:var(--kritzel-zoom-panel-button-size, 32px);padding:0;border:0;border-radius:var(--kritzel-zoom-panel-button-border-radius, 8px);background:transparent;background-color:transparent;color:var(--kritzel-zoom-panel-icon-color, #000000);--kritzel-icon-color:var(--kritzel-zoom-panel-icon-color, #000000);box-shadow:none;appearance:none;cursor:var(--kritzel-global-pointer-cursor, pointer);-webkit-tap-highlight-color:transparent}.zoom-button:hover,.zoom-button:focus-visible{background-color:var(--kritzel-zoom-panel-button-hover-background-color, hsl(0, 0%, 0%, 4.3%))}.zoom-button:active{background-color:var(--kritzel-zoom-panel-button-active-background-color, hsl(0, 0%, 0%, 8.6%))}.zoom-button:disabled{opacity:0.5;cursor:not-allowed;pointer-events:none}";export{ot as kritzel_active_users,st as kritzel_avatar,at as kritzel_awareness_cursors,lt as kritzel_back_to_content,ct as kritzel_button,ht as kritzel_color,ut as kritzel_color_palette,dt as kritzel_context_menu,pt as kritzel_controls,gt as kritzel_current_user,bt as kritzel_current_user_dialog,vt as kritzel_cursor_trail,mt as kritzel_dialog,kt as kritzel_dropdown,Ct as kritzel_editor,_e as kritzel_engine,Oe as kritzel_export,De as kritzel_font,Fe as kritzel_font_family,Re as kritzel_font_size,Le as kritzel_icon,Pe as kritzel_input,Be as kritzel_line_endings,We as kritzel_loading_overlay,Ve as kritzel_login_dialog,Ne as kritzel_master_detail,Ke as kritzel_menu,Ue as kritzel_menu_item,He as kritzel_more_menu,Ge as kritzel_notification_card,qe as kritzel_numeric_input,Ye as kritzel_opacity_slider,Ze as kritzel_pill_tabs,Xe as kritzel_portal,ri as kritzel_settings,oi as kritzel_shape_fill,wn as kritzel_share_dialog,xn as kritzel_slide_toggle,zn as kritzel_split_button,Cn as kritzel_stroke_size,Sn as kritzel_tool_config,In as kritzel_tooltip,Mn as kritzel_utility_panel,$n as kritzel_watermark,Tn as kritzel_workspace_manager,jn as kritzel_zoom_panel}
|