Files
excalidraw-box/patches/@excalidraw%2Fexcalidraw@0.18.1.patch

85 lines
294 KiB
Diff

diff --git a/dist/dev/chunk-4FTI6OG3.js b/dist/dev/chunk-4FTI6OG3.js
index 65df46b6cd47f78f2c2c7f03574d233414a995a2..d3fa26db2a351936cde8216c244b1d487a1315b8 100644
--- a/dist/dev/chunk-4FTI6OG3.js
+++ b/dist/dev/chunk-4FTI6OG3.js
@@ -364,15 +364,15 @@ var ROUGHNESS = {
cartoonist: 2
};
var STROKE_WIDTH = {
- thin: 1,
- bold: 2,
- extraBold: 4
+ thin: 0.5,
+ bold: 0.75,
+ extraBold: 1
};
var DEFAULT_ELEMENT_PROPS = {
strokeColor: COLOR_PALETTE.black,
backgroundColor: COLOR_PALETTE.transparent,
fillStyle: "solid",
- strokeWidth: 2,
+ strokeWidth: 0.75,
strokeStyle: "solid",
roughness: ROUGHNESS.artist,
opacity: 100,
diff --git a/dist/prod/chunk-K2UTITRG.js b/dist/prod/chunk-K2UTITRG.js
index fd073bcc762a7ead793b3fb371f5235c95ccb053..ec557589613ce0d132895a2963b8c4fdca6467fd 100644
--- a/dist/prod/chunk-K2UTITRG.js
+++ b/dist/prod/chunk-K2UTITRG.js
@@ -1,4 +1,4 @@
-import{a as M}from"./chunk-ZUYEQ4TG.js";import{d as P}from"./chunk-SRAX5OIU.js";import l6 from"png-chunks-extract";import U6 from"png-chunk-text";import q9 from"png-chunks-encode";import{deflate as C9,inflate as V9}from"pako";import f6 from"open-color";var p6=(e,t)=>t.reduce((n,r)=>(r in e&&(n[r]=e[r]),n),{}),k9=5,Z9=5,Ps=4,fo=4,po=1,ft=[0,2,4,6,8];var pt=(e,t)=>t.map(n=>f6[e][n]),Z={transparent:"transparent",black:"#1e1e1e",white:"#ffffff",gray:pt("gray",ft),red:pt("red",ft),pink:pt("pink",ft),grape:pt("grape",ft),violet:pt("violet",ft),blue:pt("blue",ft),cyan:pt("cyan",ft),teal:pt("teal",ft),green:pt("green",ft),yellow:pt("yellow",ft),orange:pt("orange",ft),bronze:["#f8f1ee","#eaddd7","#d2bab0","#a18072","#846358"]},Ns=p6(Z,["cyan","blue","violet","grape","pink","green","teal","yellow","orange","red"]),W9=[Z.black,Z.red[fo],Z.green[fo],Z.blue[fo],Z.yellow[fo]],z9=[Z.transparent,Z.red[po],Z.green[po],Z.blue[po],Z.yellow[po]],Q9=[Z.white,"#f8f9fa","#f5faff","#fffce8","#fdf8f6"],j9={transparent:Z.transparent,white:Z.white,gray:Z.gray,black:Z.black,bronze:Z.bronze,...Ns},eE={transparent:Z.transparent,white:Z.white,gray:Z.gray,black:Z.black,bronze:Z.bronze,...Ns},Fs=e=>[Z.cyan[e],Z.blue[e],Z.violet[e],Z.grape[e],Z.pink[e],Z.green[e],Z.teal[e],Z.yellow[e],Z.orange[e],Z.red[e]],tE=(e,t,n)=>`#${((1<<24)+(e<<16)+(t<<8)+n).toString(16).slice(1)}`;var uo=/Mac|iPod|iPhone|iPad/.test(navigator.platform),iE=/^Win/.test(navigator.platform),Bs=/\b(android)\b/i.test(navigator.userAgent),aE="netscape"in window&&navigator.userAgent.indexOf("rv:")>1&&navigator.userAgent.indexOf("Gecko")>1,u6=navigator.userAgent.indexOf("Chrome")!==-1,sE=!u6&&navigator.userAgent.indexOf("Safari")!==-1,_s=/iPad|iPhone/.test(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document,dE=()=>navigator.brave?.isBrave?.name==="isBrave",cE=typeof window<"u"&&"ResizeObserver"in window,lE="Excalidraw",Os=36,As=10,Ks=8,UE=5,fE=1,pE=30,Nt=Math.PI/12,uE="red",mo={TEXT:"text",CROSSHAIR:"crosshair",GRABBING:"grabbing",GRAB:"grab",POINTER:"pointer",MOVE:"move",AUTO:""},mE={MAIN:0,WHEEL:1,SECONDARY:2,TOUCH:-1,ERASER:5},bE={enabled:"all",disabled:"none",inheritFromUI:"var(--ui-pointerEvents)"};var EE={UNSTARTED:-1,ENDED:0,PLAYING:1,PAUSED:2,BUFFERING:3,CUED:5},je={TEST:"test",DEVELOPMENT:"development"},gE={SHAPE_ACTIONS_MENU:"App-menu__left",ZOOM_ACTIONS:"zoom-actions",SEARCH_MENU_INPUT_WRAPPER:"layer-ui__search-inputWrapper"},Mn="Xiaolai",Tn="Segoe UI Emoji",Ie={Virgil:1,Helvetica:2,Cascadia:3,Excalifont:5,Nunito:6,"Lilita One":7,"Comic Shanns":8,"Liberation Sans":9},Un={[Mn]:100,[Tn]:1e3},bo=e=>{switch(e){case Ie.Excalifont:return[Mn,Tn];default:return[Tn]}},ke={LIGHT:"light",DARK:"dark"},Pe={strokeColor:"#bbb",strokeWidth:2,strokeStyle:"solid",fillStyle:"solid",roughness:0,roundness:null,backgroundColor:"transparent",radius:8,nameOffsetY:3,nameColorLightTheme:"#999999",nameColorDarkTheme:"#7a7a7a",nameFontSize:14,nameLineHeight:1.25},Eo=1,ut=20,Ft=Ie.Excalifont,Vn="left",go="top";var br=2,Er=2*br,m6=1e-5,xE=2*Er-m6,hE="#ffffff",yE="#1e1e1e",IE="#a2f1a6";var xo=20,ho=5,yo={svg:"image/svg+xml",png:"image/png",jpg:"image/jpeg",gif:"image/gif",webp:"image/webp",bmp:"image/bmp",ico:"image/x-icon",avif:"image/avif",jfif:"image/jfif"},H={text:"text/plain",html:"text/html",json:"application/json",excalidraw:"application/vnd.excalidraw+json",excalidrawlib:"application/vnd.excalidrawlib+json","excalidraw.svg":"image/svg+xml","excalidraw.png":"image/png",binary:"application/octet-stream",...yo},Hs=[H.text,H.html,...Object.values(yo)],wE={png:"png",svg:"svg",clipboard:"clipboard"},Ze={excalidraw:"excalidraw",excalidrawClipboard:"excalidraw/clipboard",excalidrawLibrary:"excalidrawlib",excalidrawClipboardWithAPI:"excalidraw-api/clipboard"},Ci=window.EXCALIDRAW_EXPORT_SOURCE||window.location.origin,RE=500,TE=300,ME=500;var LE=100,DE=.1,Js=.1,Ys=30,SE=300;var Io="invert(93%) hue-rotate(180deg)",vE={addLibrary:"addLibrary"},$E={addLibrary:"addLibrary"},PE={canvasActions:{changeViewBackgroundColor:!0,clearCanvas:!0,export:{saveFileToDisk:!0},loadScene:!0,saveToActiveFile:!0,toggleTheme:null,saveAsImage:!0},tools:{image:!0}},NE=730,FE=1e3,BE=500,_E=1229,qn=2,Cs=[1,2,3],Vi=10,OE=1440,AE=4*1024*1024,re="http://www.w3.org/2000/svg";var qi={excalidraw:2,excalidrawLibrary:2},Se=5,Vs=.7,qs=11,kt={TOP:"top",MIDDLE:"middle",BOTTOM:"bottom"},Xi={LEFT:"left",CENTER:"center",RIGHT:"right"},Xs=20,wo=.25,Gs=32,ot={LEGACY:1,PROPORTIONAL_RADIUS:2,ADAPTIVE_RADIUS:3},Gi={architect:0,artist:1,cartoonist:2},KE={thin:1,bold:2,extraBold:4},we={strokeColor:Z.black,backgroundColor:Z.transparent,fillStyle:"solid",strokeWidth:2,strokeStyle:"solid",roughness:Gi.artist,opacity:100,locked:!1},b6="library",HE="search",ks={name:"default",defaultTab:b6},JE=new Set(["iframe","embeddable","image"]),fn={selection:"selection",rectangle:"rectangle",diamond:"diamond",ellipse:"ellipse",arrow:"arrow",line:"line",freedraw:"freedraw",text:"text",image:"image",eraser:"eraser",hand:"hand",frame:"frame",magicframe:"magicframe",embeddable:"embeddable",laser:"laser"},YE={OAI_API_KEY:"excalidraw-oai-api-key",MERMAID_TO_EXCALIDRAW:"mermaid-to-excalidraw",PUBLISH_LIBRARY:"publish-library-data"},Zs="Untitled",ki={generalStats:1,elementProperties:2},CE=1,Ws={sharp:"sharp",round:"round",elbow:"elbow"},zs=.3,gr="element",Qs=Symbol.for("__test__originalId__"),E6=(r=>(r.ACTIVE="active",r.AWAY="away",r.IDLE="idle",r))(E6||{});import{nanoid as A9}from"nanoid";var g6=Cs.includes(devicePixelRatio)?devicePixelRatio:1,mt=()=>({showWelcomeScreen:!1,theme:ke.LIGHT,collaborators:new Map,currentChartType:"bar",currentItemBackgroundColor:we.backgroundColor,currentItemEndArrowhead:"arrow",currentItemFillStyle:we.fillStyle,currentItemFontFamily:Ft,currentItemFontSize:ut,currentItemOpacity:we.opacity,currentItemRoughness:we.roughness,currentItemStartArrowhead:null,currentItemStrokeColor:we.strokeColor,currentItemRoundness:"round",currentItemArrowType:Ws.round,currentItemStrokeStyle:we.strokeStyle,currentItemStrokeWidth:we.strokeWidth,currentItemTextAlign:Vn,currentHoveredFontFamily:null,cursorButton:"up",activeEmbeddable:null,newElement:null,editingTextElement:null,editingGroupId:null,editingLinearElement:null,activeTool:{type:"selection",customType:null,locked:we.locked,lastActiveTool:null},penMode:!1,penDetected:!1,errorMessage:null,exportBackground:!0,exportScale:g6,exportEmbedScene:!1,exportWithDarkMode:!1,fileHandle:null,gridSize:xo,gridStep:ho,gridModeEnabled:!1,isBindingEnabled:!0,defaultSidebarDockedPreference:!1,isLoading:!1,isResizing:!1,isRotating:!1,lastPointerDownWith:"mouse",multiElement:null,name:null,contextMenu:null,openMenu:null,openPopup:null,openSidebar:null,openDialog:null,pasteDialog:{shown:!1,data:null},previousSelectedElementIds:{},resizingElement:null,scrolledOutside:!1,scrollX:0,scrollY:0,selectedElementIds:{},hoveredElementIds:{},selectedGroupIds:{},selectedElementsAreBeingDragged:!1,selectionElement:null,shouldCacheIgnoreZoom:!1,stats:{open:!1,panels:ki.generalStats|ki.elementProperties},startBoundElement:null,suggestedBindings:[],frameRendering:{enabled:!0,clip:!0,name:!0,outline:!0},frameToHighlight:null,editingFrame:null,elementsToHighlight:null,toast:null,viewBackgroundColor:Z.white,zenModeEnabled:!1,zoom:{value:1},viewModeEnabled:!1,pendingImageElementId:null,showHyperlinkPopup:!1,selectedLinearElement:null,snapLines:[],originSnapOffset:{x:0,y:0},objectsSnapModeEnabled:!1,userToFollow:null,followedBy:new Set,isCropping:!1,croppingElementId:null,searchMatches:[]}),x6=(e=>e)({showWelcomeScreen:{browser:!0,export:!1,server:!1},theme:{browser:!0,export:!1,server:!1},collaborators:{browser:!1,export:!1,server:!1},currentChartType:{browser:!0,export:!1,server:!1},currentItemBackgroundColor:{browser:!0,export:!1,server:!1},currentItemEndArrowhead:{browser:!0,export:!1,server:!1},currentItemFillStyle:{browser:!0,export:!1,server:!1},currentItemFontFamily:{browser:!0,export:!1,server:!1},currentItemFontSize:{browser:!0,export:!1,server:!1},currentItemRoundness:{browser:!0,export:!1,server:!1},currentItemArrowType:{browser:!0,export:!1,server:!1},currentItemOpacity:{browser:!0,export:!1,server:!1},currentItemRoughness:{browser:!0,export:!1,server:!1},currentItemStartArrowhead:{browser:!0,export:!1,server:!1},currentItemStrokeColor:{browser:!0,export:!1,server:!1},currentItemStrokeStyle:{browser:!0,export:!1,server:!1},currentItemStrokeWidth:{browser:!0,export:!1,server:!1},currentItemTextAlign:{browser:!0,export:!1,server:!1},currentHoveredFontFamily:{browser:!1,export:!1,server:!1},cursorButton:{browser:!0,export:!1,server:!1},activeEmbeddable:{browser:!1,export:!1,server:!1},newElement:{browser:!1,export:!1,server:!1},editingTextElement:{browser:!1,export:!1,server:!1},editingGroupId:{browser:!0,export:!1,server:!1},editingLinearElement:{browser:!1,export:!1,server:!1},activeTool:{browser:!0,export:!1,server:!1},penMode:{browser:!0,export:!1,server:!1},penDetected:{browser:!0,export:!1,server:!1},errorMessage:{browser:!1,export:!1,server:!1},exportBackground:{browser:!0,export:!1,server:!1},exportEmbedScene:{browser:!0,export:!1,server:!1},exportScale:{browser:!0,export:!1,server:!1},exportWithDarkMode:{browser:!0,export:!1,server:!1},fileHandle:{browser:!1,export:!1,server:!1},gridSize:{browser:!0,export:!0,server:!0},gridStep:{browser:!0,export:!0,server:!0},gridModeEnabled:{browser:!0,export:!0,server:!0},height:{browser:!1,export:!1,server:!1},isBindingEnabled:{browser:!1,export:!1,server:!1},defaultSidebarDockedPreference:{browser:!0,export:!1,server:!1},isLoading:{browser:!1,export:!1,server:!1},isResizing:{browser:!1,export:!1,server:!1},isRotating:{browser:!1,export:!1,server:!1},lastPointerDownWith:{browser:!0,export:!1,server:!1},multiElement:{browser:!1,export:!1,server:!1},name:{browser:!0,export:!1,server:!1},offsetLeft:{browser:!1,export:!1,server:!1},offsetTop:{browser:!1,export:!1,server:!1},contextMenu:{browser:!1,export:!1,server:!1},openMenu:{browser:!0,export:!1,server:!1},openPopup:{browser:!1,export:!1,server:!1},openSidebar:{browser:!0,export:!1,server:!1},openDialog:{browser:!1,export:!1,server:!1},pasteDialog:{browser:!1,export:!1,server:!1},previousSelectedElementIds:{browser:!0,export:!1,server:!1},resizingElement:{browser:!1,export:!1,server:!1},scrolledOutside:{browser:!0,export:!1,server:!1},scrollX:{browser:!0,export:!1,server:!1},scrollY:{browser:!0,export:!1,server:!1},selectedElementIds:{browser:!0,export:!1,server:!1},hoveredElementIds:{browser:!1,export:!1,server:!1},selectedGroupIds:{browser:!0,export:!1,server:!1},selectedElementsAreBeingDragged:{browser:!1,export:!1,server:!1},selectionElement:{browser:!1,export:!1,server:!1},shouldCacheIgnoreZoom:{browser:!0,export:!1,server:!1},stats:{browser:!0,export:!1,server:!1},startBoundElement:{browser:!1,export:!1,server:!1},suggestedBindings:{browser:!1,export:!1,server:!1},frameRendering:{browser:!1,export:!1,server:!1},frameToHighlight:{browser:!1,export:!1,server:!1},editingFrame:{browser:!1,export:!1,server:!1},elementsToHighlight:{browser:!1,export:!1,server:!1},toast:{browser:!1,export:!1,server:!1},viewBackgroundColor:{browser:!0,export:!0,server:!0},width:{browser:!1,export:!1,server:!1},zenModeEnabled:{browser:!0,export:!1,server:!1},zoom:{browser:!0,export:!1,server:!1},viewModeEnabled:{browser:!1,export:!1,server:!1},pendingImageElementId:{browser:!1,export:!1,server:!1},showHyperlinkPopup:{browser:!1,export:!1,server:!1},selectedLinearElement:{browser:!0,export:!1,server:!1},snapLines:{browser:!1,export:!1,server:!1},originSnapOffset:{browser:!1,export:!1,server:!1},objectsSnapModeEnabled:{browser:!0,export:!1,server:!1},userToFollow:{browser:!1,export:!1,server:!1},followedBy:{browser:!1,export:!1,server:!1},isCropping:{browser:!1,export:!1,server:!1},croppingElementId:{browser:!1,export:!1,server:!1},searchMatches:{browser:!1,export:!1,server:!1}}),js=(e,t)=>{let n={};for(let r of Object.keys(e))if(x6[r]?.[t]){let i=e[r];n[r]=i}return n};var Ro=e=>js(e,"export"),ed=e=>js(e,"server"),td=({activeTool:e})=>e.type==="eraser",nd=({activeTool:e})=>e.type==="hand";import p9 from"lodash.throttle";import L6 from"es6-promise-pool";var se=(e,t,n)=>Math.min(Math.max(e,t),n),To=(e,t,n="round")=>{let r=Math.pow(10,t);return Math[n]((e+Number.EPSILON)*r)/r},WE=(e,t,n="round")=>{let r=1/t;return Math[n](e*r)/r},xr=(e,t)=>(e+t)/2,Mo=e=>typeof e=="number"&&Number.isFinite(e),Zi=(e,t,n=1e-4)=>Math.abs(e-t)<n;var hr=e=>e<0?e+2*Math.PI:e>=2*Math.PI?e-2*Math.PI:e;function yr(e){return e*Math.PI/180}function rd(e){return e*180/Math.PI}function od(e){return Math.abs(Math.sin(2*e))<1e-4}function Be(e,t,n=0,r=0){return[e-n,t-r]}function O(e,t=[0,0]){return Be(e[0]-t[0],e[1]-t[1])}function Me(e,t){return e[0]*t[1]-t[0]*e[1]}function h6(e,t){return e[0]*t[0]+e[1]*t[1]}function st(e,t){return[e[0]+t[0],e[1]+t[1]]}function Lo(e,t){return[e[0]-t[0],e[1]-t[1]]}function ue(e,t){return Be(e[0]*t,e[1]*t)}function y6(e){return e[0]*e[0]+e[1]*e[1]}function I6(e){return Math.sqrt(y6(e))}var Je=e=>{let t=I6(e);return t===0?Be(0,0):Be(e[0]/t,e[1]/t)};function u(e,t){return[e,t]}function Ir(e){return e.length===2?u(e[0],e[1]):void 0}function q(e,t=u(0,0)){return u(t[0]+e[0],t[1]+e[1])}function Do(e){return Array.isArray(e)&&e.length===2&&typeof e[0]=="number"&&!isNaN(e[0])&&typeof e[1]=="number"&&!isNaN(e[1])}function _e(e,t){let n=Math.abs;return n(e[0]-t[0])<1e-4&&n(e[1]-t[1])<1e-4}function T([e,t],[n,r],o){return u((e-n)*Math.cos(o)-(t-r)*Math.sin(o)+n,(e-n)*Math.sin(o)+(t-r)*Math.cos(o)+r)}function wr(e,t=[0,0]){return u(e[0]+t[0],e[1]+t[1])}function Zt(e,t){return u((e[0]+t[0])/2,(e[1]+t[1])/2)}function ie(e,t){return Math.hypot(t[0]-e[0],t[1]-e[1])}function Xn(e,t){let n=t[0]-e[0],r=t[1]-e[1];return n*n+r*r}var bt=(e,t,n)=>wr(t,ue(O(e,t),n)),So=(e,t,n)=>t[0]<=Math.max(e[0],n[0])&&t[0]>=Math.min(e[0],n[0])&&t[1]<=Math.max(e[1],n[1])&&t[1]>=Math.min(e[1],n[1]);function Rr(e,t){return[e,t]}function id(e,t){let n=e[1][1]-e[0][1],r=e[0][0]-e[1][0],o=t[1][1]-t[0][1],i=t[0][0]-t[1][0],a=n*i-o*r;if(a!==0){let s=n*e[0][0]+r*e[0][1],d=o*t[0][0]+i*t[0][1];return u((s*i-d*r)/a,(n*d-o*s)/a)}return null}function A(e,t){return[e,t]}var Bt=(e,t,n=1e-4)=>{let r=vo(e,t);return r===0?!0:r<n},vo=(e,t)=>{let[n,r]=e,[[o,i],[a,s]]=t,d=n-o,c=r-i,l=a-o,U=s-i,p=d*l+c*U,m=l*l+U*U,b=-1;m!==0&&(b=p/m);let E,g;b<0?(E=o,g=i):b>1?(E=a,g=s):(E=o+b*l,g=i+b*U);let h=n-E,x=r-g;return Math.sqrt(h*h+x*x)};function pn(e,t){let n=id(Rr(e[0],e[1]),Rr(t[0],t[1]));return!n||!Bt(n,t)||!Bt(n,e)?null:n}function Tr(e,t){return[e,t]}function ad(e,t){return[A(e[0],u(e[1][0],e[0][1])),A(u(e[1][0],e[0][1]),e[1]),A(e[1],u(e[0][0],e[1][1])),A(u(e[0][0],e[1][1]),e[0])].map(n=>pn(t,n)).filter(n=>!!n)}function Et(e,t,n,r){return[e,t,n,r]}function sd(e,t,n,r=1e-6){return[(e(t+r,n)-e(t-r,n))/(2*r),(e(t,n+r)-e(t,n-r))/(2*r)]}function w6(e,t,n,r=.001,o=10){let i=1/0,a=0;for(;i>=r;){if(a>=o)return null;let s=e(t,n),d=[sd((E,g)=>e(E,g)[0],t,n),sd((E,g)=>e(E,g)[1],t,n)],c=[[-s[0]],[-s[1]]],l=d[0][0]*d[1][1]-d[0][1]*d[1][0];if(l===0)return null;let U=[[d[1][1]/l,-d[0][1]/l],[-d[1][0]/l,d[0][0]/l]],p=[[U[0][0]*c[0][0]+U[0][1]*c[1][0]],[U[1][0]*c[0][0]+U[1][1]*c[1][0]]];t=t+p[0][0],n=n+p[1][0];let[m,b]=e(t,n);i=Math.max(Math.abs(m),Math.abs(b)),a+=1}return[t,n]}var Mr=(e,t)=>u((1-t)**3*e[0][0]+3*(1-t)**2*t*e[1][0]+3*(1-t)*t**2*e[2][0]+t**3*e[3][0],(1-t)**3*e[0][1]+3*(1-t)**2*t*e[1][1]+3*(1-t)*t**2*e[2][1]+t**3*e[3][1]);function Wi(e,t){let n=T6(e);if(ad(Tr(u(n[0],n[1]),u(n[2],n[3])),t).length===0)return[];let r=s=>u(t[0][0]+s*(t[1][0]-t[0][0]),t[0][1]+s*(t[1][1]-t[0][1])),o=[[.5,0],[.2,0],[.8,0]],i=([s,d])=>{let c=w6((p,m)=>{let b=Mr(e,p),E=r(m);return[b[0]-E[0],b[1]-E[1]]},s,d);if(!c)return null;let[l,U]=c;return l<0||l>1||U<0||U>1?null:Mr(e,l)},a=i(o[0]);return a?[a]:(a=i(o[1]),a?[a]:(a=i(o[2]),a?[a]:[]))}function R6(e,t,n=.001){let r=(c,l,U,p=n)=>{let m=c,b=l,E;for(;b-m>p;)E=(b+m)/2,U(E-p)<U(E+p)?b=E:m=E;return E},i=0;for(let c=1/0,l=0;l<30;l++){let U=ie(t,Mr(e,l/30));U<c&&(c=U,i=l)}let a=Math.max((i-1)/30,0),s=Math.min((i+1)/30,1),d=r(a,s,c=>ie(t,Mr(e,c)));return d?Mr(e,d):null}function zi(e,t){let n=R6(e,t);return n?ie(t,n):0}function T6(e){let[t,n,r,o]=e,i=[t[0],n[0],r[0],o[0]],a=[t[1],n[1],r[1],o[1]];return[Math.min(...i),Math.min(...a),Math.max(...i),Math.max(...a)]}function Qi(...e){return cd(e)}function Gn(e){return cd(e)}var ji=(e,t)=>{let n=e[0],r=e[1],o=!1;for(let i=0,a=t.length-1;i<t.length;a=i++){let s=t[i][0],d=t[i][1],c=t[a][0],l=t[a][1];(d>r&&l<=r||d<=r&&l>r)&&n<(c-s)*(r-d)/(l-d)+s&&(o=!o)}return o},dd=(e,t,n=1e-4)=>{let r=!1;for(let o=0,i=t.length-1;o<i;o++)if(Bt(e,A(t[o],t[o+1]),n)){r=!0;break}return r};function cd(e){return M6(e)?e:[...e,e[0]]}function M6(e){return _e(e[0],e[e.length-1])}function Oe(e,t){return tt([e,t])}var Lr=([e,t],[n,r])=>e<=n?t>=n:e>=n?r>=e:!1,Dr=([e,t],[n,r])=>{let o=Math.max(e,n),i=Math.min(t,r);return o<=i?tt([o,i]):null},Sr=(e,[t,n])=>e>=t&&e<=n;function Ln([e,t,n],r){let o=(l,U,p)=>(l[0]-p[0])*(U[1]-p[1])-(U[0]-p[0])*(l[1]-p[1]),i=o(r,e,t),a=o(r,t,n),s=o(r,n,e),d=i<0||a<0||s<0,c=i>0||a>0||s>0;return!(d&&c)}var ld=null;var ng=()=>{if(ld)return ld;let e=new Date,t=e.getFullYear(),n=`${e.getMonth()+1}`.padStart(2,"0"),r=`${e.getDate()}`.padStart(2,"0"),o=`${e.getHours()}`.padStart(2,"0"),i=`${e.getMinutes()}`.padStart(2,"0");return`${t}-${n}-${r}-${o}${i}`},rg=e=>e.charAt(0).toUpperCase()+e.slice(1),og=e=>e instanceof HTMLElement&&e.className.includes("ToolIcon"),D6=e=>e instanceof HTMLElement&&e.dataset.type==="wysiwyg"||e instanceof HTMLBRElement||e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement||e instanceof HTMLSelectElement,ig=e=>D6(e)||e instanceof Element&&!!e.closest("label, button"),ag=e=>e instanceof HTMLElement&&e.dataset.type==="wysiwyg"||e instanceof HTMLBRElement||e instanceof HTMLTextAreaElement||e instanceof HTMLInputElement&&(e.type==="text"||e.type==="number"||e.type==="password"),ea=({fontFamily:e})=>{for(let[t,n]of Object.entries(Ie))if(n===e)return`${t}${bo(n).map(r=>`, ${r}`).join("")}`;return Tn},Ee=({fontSize:e,fontFamily:t})=>`${e}px ${ea({fontFamily:t})}`,$o=(e,t)=>{let n=0,r=null,o=(...i)=>{r=i,clearTimeout(n),n=window.setTimeout(()=>{r=null,e(...i)},t)};return o.flush=()=>{if(clearTimeout(n),r){let i=r;r=null,e(...i)}},o.cancel=()=>{r=null,clearTimeout(n)},o},pd=(e,t)=>{let n=null,r=null,o=null,i=s=>{n=window.requestAnimationFrame(()=>{n=null,e(...s),r=null,o&&(r=o,o=null,i(r))})},a=(...s)=>{if(M.MODE==="test"){e(...s);return}r=s,n===null?i(r):t?.trailing&&(o=s)};return a.flush=()=>{n!==null&&(cancelAnimationFrame(n),n=null),r&&(e(...o||r),r=o=null)},a.cancel=()=>{r=o=null,n!==null&&(cancelAnimationFrame(n),n=null)},a},ud=e=>1-Math.pow(1-e,4),Ud=(e,t,n)=>(t-e)*ud(n)+e,sg=({fromValues:e,toValues:t,onStep:n,duration:r=250,interpolateValue:o,onStart:i,onEnd:a,onCancel:s})=>{let d=!1,c=0,l;function U(p){if(d)return;l===void 0&&(l=p,i?.());let m=Math.min(p-l,r),b=ud(m/r),E={};if(Object.keys(e).forEach(g=>{let h=g,x=(t[h]-e[h])*b+e[h];E[h]=x}),n(E),m<r){let g=m/r,h={};Object.keys(e).forEach(x=>{let y=x,w=e[y],I=t[y],S;S=o?o(w,I,g,y):Ud(w,I,g),S==null&&(S=Ud(w,I,g)),h[y]=S}),n(h),c=window.requestAnimationFrame(U)}else n(t),a?.()}return c=window.requestAnimationFrame(U),()=>{s?.(),d=!0,window.cancelAnimationFrame(c)}},dg=(e,t)=>{if(!e.length||t<1)return[];let n=0,r=0,o=Array(Math.ceil(e.length/t));for(;n<e.length;)o[r++]=e.slice(n,n+=t);return o};var dt=(e,t)=>Math.abs(e-t),$r=(e,t)=>t.type==="custom"?{...e.activeTool,type:"custom",customType:t.customType,locked:t.locked??e.activeTool.locked}:{...e.activeTool,lastActiveTool:t.lastActiveToolBeforeEraser===void 0?e.activeTool.lastActiveTool:t.lastActiveToolBeforeEraser,type:t.type,customType:null,locked:t.locked??e.activeTool.locked};var cg=e=>(e=e.replace(/\bAlt\b/i,"Alt").replace(/\bShift\b/i,"Shift").replace(/\b(Enter|Return)\b/i,"Enter"),uo?e.replace(/\bCtrlOrCmd\b/gi,"Cmd").replace(/\bAlt\b/i,"Option"):e.replace(/\bCtrlOrCmd\b/gi,"Ctrl")),Dn=({clientX:e,clientY:t},{zoom:n,offsetLeft:r,offsetTop:o,scrollX:i,scrollY:a})=>{let s=(e-r)/n.value-i,d=(t-o)/n.value-a;return{x:s,y:d}},ta=({sceneX:e,sceneY:t},{zoom:n,offsetLeft:r,offsetTop:o,scrollX:i,scrollY:a})=>{let s=(e+i)*n.value+r,d=(t+a)*n.value+o;return{x:s,y:d}},lg=e=>getComputedStyle(document.documentElement).getPropertyValue(`--${e}`),S6="A-Za-z\xC0-\xD6\xD8-\xF6\xF8-\u02B8\u0300-\u0590\u0800-\u1FFF\u2C00-\uFB1C\uFDFE-\uFE6F\uFEFD-\uFFFF",v6="\u0591-\u07FF\uFB1D-\uFDFD\uFE70-\uFEFC",$6=new RegExp(`^[^${S6}]*[${v6}]`),Po=e=>$6.test(e),un=e=>{let[t,n]=e;return{x:t,y:n}},Ug=e=>{if(e?.name==="AbortError"){console.warn(e);return}throw e},fg=(e,t,n=0)=>{n<0&&(n=e.length+n),n=Math.min(e.length,Math.max(n,0));let r=n-1;for(;++r<e.length;)if(t(e[r],r,e))return r;return-1},pg=(e,t,n=e.length-1)=>{n<0&&(n=e.length+n),n=Math.min(e.length-1,Math.max(n,0));let r=n+1;for(;--r>-1;)if(t(e[r],r,e))return r;return-1},Wt=e=>{let t=e.length===5&&e.substr(4,1)==="0",n=e.length===9&&e.substr(7,2)==="00";return t||n||e===Z.transparent},No=e=>e.fillStyle!=="solid"||Wt(e.backgroundColor),ug=()=>{let e,t,n=new Promise((r,o)=>{e=r,t=o});return n.resolve=e,n.reject=t,n};var mg=e=>{let t=e.parentElement;for(;t;){if(t===document.body)return document;let{overflowY:n}=window.getComputedStyle(t);if(t.scrollHeight>t.clientHeight&&(n==="auto"||n==="scroll"||n==="overlay"))return t;t=t.parentElement}return document},bg=e=>{let t=e.parentElement;for(;t;){if(t.tabIndex>-1){t.focus();return}t=t.parentElement}},Eg=e=>{e.preventDefault(),e.returnValue=""},md=e=>Array.from(e).map(t=>`0${t.toString(16)}`.slice(-2)).join(""),zt=()=>Ot()?1:Date.now(),te=e=>e instanceof Map?e:e.reduce((t,n)=>(t.set(typeof n=="string"?n:n.id,n),t),new Map),gg=e=>e.reduce((t,n,r)=>(t.set(n.id,[n,r]),t),new Map),_t=(e,t)=>e.reduce((n,r)=>(n[t?t(r):String(r)]=r,n),{}),xg=e=>e.reduce((t,n,r)=>{let o={...n,prev:null,next:null};if(r!==0){let i=t[r-1];if(o.prev=i,i.next=o,r===e.length-1){let a=t[0];o.next=a,a.prev=o}}return t.push(o),t},[]),Ot=()=>M.MODE==="test",hg=()=>M.MODE==="development",bd=()=>typeof process<"u"&&!0,yg=(e,t)=>new CustomEvent(e,{detail:{nativeEvent:t},cancelable:!0}),Ig=(e,t)=>{let n=!1;for(let r in t){let o=t[r];if(typeof o<"u"){if(e[r]===o&&(typeof o!="object"||o===null))continue;n=!0}}return n?{...e,...t}:e};var wg=()=>{try{return window.self===window.top?"top":"iframe"}catch{return"iframe"}};var Fo=e=>!!e&&typeof e=="object"&&"then"in e&&"catch"in e&&"finally"in e,Rg=e=>{let t=e?.querySelectorAll("button, a, input, select, textarea, div[tabindex], label[tabindex]");return t?Array.from(t).filter(n=>n.tabIndex>-1&&!n.disabled):[]},fd=(e,t)=>Array.isArray(e)&&Array.isArray(t)&&e.length===0&&t.length===0?!0:e===t,Qt=(e,t,n,r=!1)=>{let o=Object.keys(e),i=Object.keys(t);if(o.length!==i.length)return r&&console.warn("%cisShallowEqual: objects don't have same properties ->","color: #8B4000",e,t),!1;if(n&&Array.isArray(n)){for(let a of n)if(!(e[a]===t[a]||fd(e[a],t[a])))return r&&console.warn(`%cisShallowEqual: ${a} not equal ->`,"color: #8B4000",e[a],t[a]),!1;return!0}return o.every(a=>{let s=n?.[a],d=s?s(e[a],t[a]):e[a]===t[a]||fd(e[a],t[a]);return!d&&r&&console.warn(`%cisShallowEqual: ${a} not equal ->`,"color: #8B4000",e[a],t[a]),d})},Tg=(e,t,{checkForDefaultPrevented:n=!0}={})=>function(o){if(e?.(o),!n||!o?.defaultPrevented)return t?.(o)},Sn=(e,t,n)=>{if(!t)return e;if(n)return console.error(t),e;throw new Error(t)};function Ae(e,t){if(!e)throw new Error(t)}var Mg=e=>{let t,n,r=function(o){let i=Object.entries(o);if(t){let s=!0;for(let[d,c]of i)if(t.get(d)!==c){s=!1;break}if(s)return n}let a=e(o);return t=new Map(i),n=a,a};return r.clear=()=>{t=void 0,n=void 0},r},Ed=(e,t)=>e instanceof Set||e instanceof Map?e.has(t):"includes"in e?e.includes(t):e.hasOwnProperty(t),Lg=e=>JSON.parse(JSON.stringify(e)),Dg=(e,t)=>Qt(e,t)?e:t;function Sg(e,t,n,r){return e?(e?.addEventListener?.(t,n,r),()=>{e?.removeEventListener?.(t,n,r)}):()=>{}}function vg(e,t=!0){let n=e.length;if(n<4)return"";let r=e[0],o=e[1],i=e[2],a=`M${r[0].toFixed(2)},${r[1].toFixed(2)} Q${o[0].toFixed(2)},${o[1].toFixed(2)} ${xr(o[0],i[0]).toFixed(2)},${xr(o[1],i[1]).toFixed(2)} T`;for(let s=2,d=n-1;s<d;s++)r=e[s],o=e[s+1],a+=`${xr(r[0],o[0]).toFixed(2)},${xr(r[1],o[1]).toFixed(2)} `;return t&&(a+="Z"),a}var gd=e=>e.replace(/\r?\n|\r/g,`
+import{a as M}from"./chunk-ZUYEQ4TG.js";import{d as P}from"./chunk-SRAX5OIU.js";import l6 from"png-chunks-extract";import U6 from"png-chunk-text";import q9 from"png-chunks-encode";import{deflate as C9,inflate as V9}from"pako";import f6 from"open-color";var p6=(e,t)=>t.reduce((n,r)=>(r in e&&(n[r]=e[r]),n),{}),k9=5,Z9=5,Ps=4,fo=4,po=1,ft=[0,2,4,6,8];var pt=(e,t)=>t.map(n=>f6[e][n]),Z={transparent:"transparent",black:"#1e1e1e",white:"#ffffff",gray:pt("gray",ft),red:pt("red",ft),pink:pt("pink",ft),grape:pt("grape",ft),violet:pt("violet",ft),blue:pt("blue",ft),cyan:pt("cyan",ft),teal:pt("teal",ft),green:pt("green",ft),yellow:pt("yellow",ft),orange:pt("orange",ft),bronze:["#f8f1ee","#eaddd7","#d2bab0","#a18072","#846358"]},Ns=p6(Z,["cyan","blue","violet","grape","pink","green","teal","yellow","orange","red"]),W9=[Z.black,Z.red[fo],Z.green[fo],Z.blue[fo],Z.yellow[fo]],z9=[Z.transparent,Z.red[po],Z.green[po],Z.blue[po],Z.yellow[po]],Q9=[Z.white,"#f8f9fa","#f5faff","#fffce8","#fdf8f6"],j9={transparent:Z.transparent,white:Z.white,gray:Z.gray,black:Z.black,bronze:Z.bronze,...Ns},eE={transparent:Z.transparent,white:Z.white,gray:Z.gray,black:Z.black,bronze:Z.bronze,...Ns},Fs=e=>[Z.cyan[e],Z.blue[e],Z.violet[e],Z.grape[e],Z.pink[e],Z.green[e],Z.teal[e],Z.yellow[e],Z.orange[e],Z.red[e]],tE=(e,t,n)=>`#${((1<<24)+(e<<16)+(t<<8)+n).toString(16).slice(1)}`;var uo=/Mac|iPod|iPhone|iPad/.test(navigator.platform),iE=/^Win/.test(navigator.platform),Bs=/\b(android)\b/i.test(navigator.userAgent),aE="netscape"in window&&navigator.userAgent.indexOf("rv:")>1&&navigator.userAgent.indexOf("Gecko")>1,u6=navigator.userAgent.indexOf("Chrome")!==-1,sE=!u6&&navigator.userAgent.indexOf("Safari")!==-1,_s=/iPad|iPhone/.test(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document,dE=()=>navigator.brave?.isBrave?.name==="isBrave",cE=typeof window<"u"&&"ResizeObserver"in window,lE="Excalidraw",Os=36,As=10,Ks=8,UE=5,fE=1,pE=30,Nt=Math.PI/12,uE="red",mo={TEXT:"text",CROSSHAIR:"crosshair",GRABBING:"grabbing",GRAB:"grab",POINTER:"pointer",MOVE:"move",AUTO:""},mE={MAIN:0,WHEEL:1,SECONDARY:2,TOUCH:-1,ERASER:5},bE={enabled:"all",disabled:"none",inheritFromUI:"var(--ui-pointerEvents)"};var EE={UNSTARTED:-1,ENDED:0,PLAYING:1,PAUSED:2,BUFFERING:3,CUED:5},je={TEST:"test",DEVELOPMENT:"development"},gE={SHAPE_ACTIONS_MENU:"App-menu__left",ZOOM_ACTIONS:"zoom-actions",SEARCH_MENU_INPUT_WRAPPER:"layer-ui__search-inputWrapper"},Mn="Xiaolai",Tn="Segoe UI Emoji",Ie={Virgil:1,Helvetica:2,Cascadia:3,Excalifont:5,Nunito:6,"Lilita One":7,"Comic Shanns":8,"Liberation Sans":9},Un={[Mn]:100,[Tn]:1e3},bo=e=>{switch(e){case Ie.Excalifont:return[Mn,Tn];default:return[Tn]}},ke={LIGHT:"light",DARK:"dark"},Pe={strokeColor:"#bbb",strokeWidth:2,strokeStyle:"solid",fillStyle:"solid",roughness:0,roundness:null,backgroundColor:"transparent",radius:8,nameOffsetY:3,nameColorLightTheme:"#999999",nameColorDarkTheme:"#7a7a7a",nameFontSize:14,nameLineHeight:1.25},Eo=1,ut=20,Ft=Ie.Excalifont,Vn="left",go="top";var br=2,Er=2*br,m6=1e-5,xE=2*Er-m6,hE="#ffffff",yE="#1e1e1e",IE="#a2f1a6";var xo=20,ho=5,yo={svg:"image/svg+xml",png:"image/png",jpg:"image/jpeg",gif:"image/gif",webp:"image/webp",bmp:"image/bmp",ico:"image/x-icon",avif:"image/avif",jfif:"image/jfif"},H={text:"text/plain",html:"text/html",json:"application/json",excalidraw:"application/vnd.excalidraw+json",excalidrawlib:"application/vnd.excalidrawlib+json","excalidraw.svg":"image/svg+xml","excalidraw.png":"image/png",binary:"application/octet-stream",...yo},Hs=[H.text,H.html,...Object.values(yo)],wE={png:"png",svg:"svg",clipboard:"clipboard"},Ze={excalidraw:"excalidraw",excalidrawClipboard:"excalidraw/clipboard",excalidrawLibrary:"excalidrawlib",excalidrawClipboardWithAPI:"excalidraw-api/clipboard"},Ci=window.EXCALIDRAW_EXPORT_SOURCE||window.location.origin,RE=500,TE=300,ME=500;var LE=100,DE=.1,Js=.1,Ys=30,SE=300;var Io="invert(93%) hue-rotate(180deg)",vE={addLibrary:"addLibrary"},$E={addLibrary:"addLibrary"},PE={canvasActions:{changeViewBackgroundColor:!0,clearCanvas:!0,export:{saveFileToDisk:!0},loadScene:!0,saveToActiveFile:!0,toggleTheme:null,saveAsImage:!0},tools:{image:!0}},NE=730,FE=1e3,BE=500,_E=1229,qn=2,Cs=[1,2,3],Vi=10,OE=1440,AE=4*1024*1024,re="http://www.w3.org/2000/svg";var qi={excalidraw:2,excalidrawLibrary:2},Se=5,Vs=.7,qs=11,kt={TOP:"top",MIDDLE:"middle",BOTTOM:"bottom"},Xi={LEFT:"left",CENTER:"center",RIGHT:"right"},Xs=20,wo=.25,Gs=32,ot={LEGACY:1,PROPORTIONAL_RADIUS:2,ADAPTIVE_RADIUS:3},Gi={architect:0,artist:1,cartoonist:2},KE={thin:.5,bold:.75,extraBold:1},we={strokeColor:Z.black,backgroundColor:Z.transparent,fillStyle:"solid",strokeWidth:.75,strokeStyle:"solid",roughness:Gi.artist,opacity:100,locked:!1},b6="library",HE="search",ks={name:"default",defaultTab:b6},JE=new Set(["iframe","embeddable","image"]),fn={selection:"selection",rectangle:"rectangle",diamond:"diamond",ellipse:"ellipse",arrow:"arrow",line:"line",freedraw:"freedraw",text:"text",image:"image",eraser:"eraser",hand:"hand",frame:"frame",magicframe:"magicframe",embeddable:"embeddable",laser:"laser"},YE={OAI_API_KEY:"excalidraw-oai-api-key",MERMAID_TO_EXCALIDRAW:"mermaid-to-excalidraw",PUBLISH_LIBRARY:"publish-library-data"},Zs="Untitled",ki={generalStats:1,elementProperties:2},CE=1,Ws={sharp:"sharp",round:"round",elbow:"elbow"},zs=.3,gr="element",Qs=Symbol.for("__test__originalId__"),E6=(r=>(r.ACTIVE="active",r.AWAY="away",r.IDLE="idle",r))(E6||{});import{nanoid as A9}from"nanoid";var g6=Cs.includes(devicePixelRatio)?devicePixelRatio:1,mt=()=>({showWelcomeScreen:!1,theme:ke.LIGHT,collaborators:new Map,currentChartType:"bar",currentItemBackgroundColor:we.backgroundColor,currentItemEndArrowhead:"arrow",currentItemFillStyle:we.fillStyle,currentItemFontFamily:Ft,currentItemFontSize:ut,currentItemOpacity:we.opacity,currentItemRoughness:we.roughness,currentItemStartArrowhead:null,currentItemStrokeColor:we.strokeColor,currentItemRoundness:"round",currentItemArrowType:Ws.round,currentItemStrokeStyle:we.strokeStyle,currentItemStrokeWidth:we.strokeWidth,currentItemTextAlign:Vn,currentHoveredFontFamily:null,cursorButton:"up",activeEmbeddable:null,newElement:null,editingTextElement:null,editingGroupId:null,editingLinearElement:null,activeTool:{type:"selection",customType:null,locked:we.locked,lastActiveTool:null},penMode:!1,penDetected:!1,errorMessage:null,exportBackground:!0,exportScale:g6,exportEmbedScene:!1,exportWithDarkMode:!1,fileHandle:null,gridSize:xo,gridStep:ho,gridModeEnabled:!1,isBindingEnabled:!0,defaultSidebarDockedPreference:!1,isLoading:!1,isResizing:!1,isRotating:!1,lastPointerDownWith:"mouse",multiElement:null,name:null,contextMenu:null,openMenu:null,openPopup:null,openSidebar:null,openDialog:null,pasteDialog:{shown:!1,data:null},previousSelectedElementIds:{},resizingElement:null,scrolledOutside:!1,scrollX:0,scrollY:0,selectedElementIds:{},hoveredElementIds:{},selectedGroupIds:{},selectedElementsAreBeingDragged:!1,selectionElement:null,shouldCacheIgnoreZoom:!1,stats:{open:!1,panels:ki.generalStats|ki.elementProperties},startBoundElement:null,suggestedBindings:[],frameRendering:{enabled:!0,clip:!0,name:!0,outline:!0},frameToHighlight:null,editingFrame:null,elementsToHighlight:null,toast:null,viewBackgroundColor:Z.white,zenModeEnabled:!1,zoom:{value:1},viewModeEnabled:!1,pendingImageElementId:null,showHyperlinkPopup:!1,selectedLinearElement:null,snapLines:[],originSnapOffset:{x:0,y:0},objectsSnapModeEnabled:!1,userToFollow:null,followedBy:new Set,isCropping:!1,croppingElementId:null,searchMatches:[]}),x6=(e=>e)({showWelcomeScreen:{browser:!0,export:!1,server:!1},theme:{browser:!0,export:!1,server:!1},collaborators:{browser:!1,export:!1,server:!1},currentChartType:{browser:!0,export:!1,server:!1},currentItemBackgroundColor:{browser:!0,export:!1,server:!1},currentItemEndArrowhead:{browser:!0,export:!1,server:!1},currentItemFillStyle:{browser:!0,export:!1,server:!1},currentItemFontFamily:{browser:!0,export:!1,server:!1},currentItemFontSize:{browser:!0,export:!1,server:!1},currentItemRoundness:{browser:!0,export:!1,server:!1},currentItemArrowType:{browser:!0,export:!1,server:!1},currentItemOpacity:{browser:!0,export:!1,server:!1},currentItemRoughness:{browser:!0,export:!1,server:!1},currentItemStartArrowhead:{browser:!0,export:!1,server:!1},currentItemStrokeColor:{browser:!0,export:!1,server:!1},currentItemStrokeStyle:{browser:!0,export:!1,server:!1},currentItemStrokeWidth:{browser:!0,export:!1,server:!1},currentItemTextAlign:{browser:!0,export:!1,server:!1},currentHoveredFontFamily:{browser:!1,export:!1,server:!1},cursorButton:{browser:!0,export:!1,server:!1},activeEmbeddable:{browser:!1,export:!1,server:!1},newElement:{browser:!1,export:!1,server:!1},editingTextElement:{browser:!1,export:!1,server:!1},editingGroupId:{browser:!0,export:!1,server:!1},editingLinearElement:{browser:!1,export:!1,server:!1},activeTool:{browser:!0,export:!1,server:!1},penMode:{browser:!0,export:!1,server:!1},penDetected:{browser:!0,export:!1,server:!1},errorMessage:{browser:!1,export:!1,server:!1},exportBackground:{browser:!0,export:!1,server:!1},exportEmbedScene:{browser:!0,export:!1,server:!1},exportScale:{browser:!0,export:!1,server:!1},exportWithDarkMode:{browser:!0,export:!1,server:!1},fileHandle:{browser:!1,export:!1,server:!1},gridSize:{browser:!0,export:!0,server:!0},gridStep:{browser:!0,export:!0,server:!0},gridModeEnabled:{browser:!0,export:!0,server:!0},height:{browser:!1,export:!1,server:!1},isBindingEnabled:{browser:!1,export:!1,server:!1},defaultSidebarDockedPreference:{browser:!0,export:!1,server:!1},isLoading:{browser:!1,export:!1,server:!1},isResizing:{browser:!1,export:!1,server:!1},isRotating:{browser:!1,export:!1,server:!1},lastPointerDownWith:{browser:!0,export:!1,server:!1},multiElement:{browser:!1,export:!1,server:!1},name:{browser:!0,export:!1,server:!1},offsetLeft:{browser:!1,export:!1,server:!1},offsetTop:{browser:!1,export:!1,server:!1},contextMenu:{browser:!1,export:!1,server:!1},openMenu:{browser:!0,export:!1,server:!1},openPopup:{browser:!1,export:!1,server:!1},openSidebar:{browser:!0,export:!1,server:!1},openDialog:{browser:!1,export:!1,server:!1},pasteDialog:{browser:!1,export:!1,server:!1},previousSelectedElementIds:{browser:!0,export:!1,server:!1},resizingElement:{browser:!1,export:!1,server:!1},scrolledOutside:{browser:!0,export:!1,server:!1},scrollX:{browser:!0,export:!1,server:!1},scrollY:{browser:!0,export:!1,server:!1},selectedElementIds:{browser:!0,export:!1,server:!1},hoveredElementIds:{browser:!1,export:!1,server:!1},selectedGroupIds:{browser:!0,export:!1,server:!1},selectedElementsAreBeingDragged:{browser:!1,export:!1,server:!1},selectionElement:{browser:!1,export:!1,server:!1},shouldCacheIgnoreZoom:{browser:!0,export:!1,server:!1},stats:{browser:!0,export:!1,server:!1},startBoundElement:{browser:!1,export:!1,server:!1},suggestedBindings:{browser:!1,export:!1,server:!1},frameRendering:{browser:!1,export:!1,server:!1},frameToHighlight:{browser:!1,export:!1,server:!1},editingFrame:{browser:!1,export:!1,server:!1},elementsToHighlight:{browser:!1,export:!1,server:!1},toast:{browser:!1,export:!1,server:!1},viewBackgroundColor:{browser:!0,export:!0,server:!0},width:{browser:!1,export:!1,server:!1},zenModeEnabled:{browser:!0,export:!1,server:!1},zoom:{browser:!0,export:!1,server:!1},viewModeEnabled:{browser:!1,export:!1,server:!1},pendingImageElementId:{browser:!1,export:!1,server:!1},showHyperlinkPopup:{browser:!1,export:!1,server:!1},selectedLinearElement:{browser:!0,export:!1,server:!1},snapLines:{browser:!1,export:!1,server:!1},originSnapOffset:{browser:!1,export:!1,server:!1},objectsSnapModeEnabled:{browser:!0,export:!1,server:!1},userToFollow:{browser:!1,export:!1,server:!1},followedBy:{browser:!1,export:!1,server:!1},isCropping:{browser:!1,export:!1,server:!1},croppingElementId:{browser:!1,export:!1,server:!1},searchMatches:{browser:!1,export:!1,server:!1}}),js=(e,t)=>{let n={};for(let r of Object.keys(e))if(x6[r]?.[t]){let i=e[r];n[r]=i}return n};var Ro=e=>js(e,"export"),ed=e=>js(e,"server"),td=({activeTool:e})=>e.type==="eraser",nd=({activeTool:e})=>e.type==="hand";import p9 from"lodash.throttle";import L6 from"es6-promise-pool";var se=(e,t,n)=>Math.min(Math.max(e,t),n),To=(e,t,n="round")=>{let r=Math.pow(10,t);return Math[n]((e+Number.EPSILON)*r)/r},WE=(e,t,n="round")=>{let r=1/t;return Math[n](e*r)/r},xr=(e,t)=>(e+t)/2,Mo=e=>typeof e=="number"&&Number.isFinite(e),Zi=(e,t,n=1e-4)=>Math.abs(e-t)<n;var hr=e=>e<0?e+2*Math.PI:e>=2*Math.PI?e-2*Math.PI:e;function yr(e){return e*Math.PI/180}function rd(e){return e*180/Math.PI}function od(e){return Math.abs(Math.sin(2*e))<1e-4}function Be(e,t,n=0,r=0){return[e-n,t-r]}function O(e,t=[0,0]){return Be(e[0]-t[0],e[1]-t[1])}function Me(e,t){return e[0]*t[1]-t[0]*e[1]}function h6(e,t){return e[0]*t[0]+e[1]*t[1]}function st(e,t){return[e[0]+t[0],e[1]+t[1]]}function Lo(e,t){return[e[0]-t[0],e[1]-t[1]]}function ue(e,t){return Be(e[0]*t,e[1]*t)}function y6(e){return e[0]*e[0]+e[1]*e[1]}function I6(e){return Math.sqrt(y6(e))}var Je=e=>{let t=I6(e);return t===0?Be(0,0):Be(e[0]/t,e[1]/t)};function u(e,t){return[e,t]}function Ir(e){return e.length===2?u(e[0],e[1]):void 0}function q(e,t=u(0,0)){return u(t[0]+e[0],t[1]+e[1])}function Do(e){return Array.isArray(e)&&e.length===2&&typeof e[0]=="number"&&!isNaN(e[0])&&typeof e[1]=="number"&&!isNaN(e[1])}function _e(e,t){let n=Math.abs;return n(e[0]-t[0])<1e-4&&n(e[1]-t[1])<1e-4}function T([e,t],[n,r],o){return u((e-n)*Math.cos(o)-(t-r)*Math.sin(o)+n,(e-n)*Math.sin(o)+(t-r)*Math.cos(o)+r)}function wr(e,t=[0,0]){return u(e[0]+t[0],e[1]+t[1])}function Zt(e,t){return u((e[0]+t[0])/2,(e[1]+t[1])/2)}function ie(e,t){return Math.hypot(t[0]-e[0],t[1]-e[1])}function Xn(e,t){let n=t[0]-e[0],r=t[1]-e[1];return n*n+r*r}var bt=(e,t,n)=>wr(t,ue(O(e,t),n)),So=(e,t,n)=>t[0]<=Math.max(e[0],n[0])&&t[0]>=Math.min(e[0],n[0])&&t[1]<=Math.max(e[1],n[1])&&t[1]>=Math.min(e[1],n[1]);function Rr(e,t){return[e,t]}function id(e,t){let n=e[1][1]-e[0][1],r=e[0][0]-e[1][0],o=t[1][1]-t[0][1],i=t[0][0]-t[1][0],a=n*i-o*r;if(a!==0){let s=n*e[0][0]+r*e[0][1],d=o*t[0][0]+i*t[0][1];return u((s*i-d*r)/a,(n*d-o*s)/a)}return null}function A(e,t){return[e,t]}var Bt=(e,t,n=1e-4)=>{let r=vo(e,t);return r===0?!0:r<n},vo=(e,t)=>{let[n,r]=e,[[o,i],[a,s]]=t,d=n-o,c=r-i,l=a-o,U=s-i,p=d*l+c*U,m=l*l+U*U,b=-1;m!==0&&(b=p/m);let E,g;b<0?(E=o,g=i):b>1?(E=a,g=s):(E=o+b*l,g=i+b*U);let h=n-E,x=r-g;return Math.sqrt(h*h+x*x)};function pn(e,t){let n=id(Rr(e[0],e[1]),Rr(t[0],t[1]));return!n||!Bt(n,t)||!Bt(n,e)?null:n}function Tr(e,t){return[e,t]}function ad(e,t){return[A(e[0],u(e[1][0],e[0][1])),A(u(e[1][0],e[0][1]),e[1]),A(e[1],u(e[0][0],e[1][1])),A(u(e[0][0],e[1][1]),e[0])].map(n=>pn(t,n)).filter(n=>!!n)}function Et(e,t,n,r){return[e,t,n,r]}function sd(e,t,n,r=1e-6){return[(e(t+r,n)-e(t-r,n))/(2*r),(e(t,n+r)-e(t,n-r))/(2*r)]}function w6(e,t,n,r=.001,o=10){let i=1/0,a=0;for(;i>=r;){if(a>=o)return null;let s=e(t,n),d=[sd((E,g)=>e(E,g)[0],t,n),sd((E,g)=>e(E,g)[1],t,n)],c=[[-s[0]],[-s[1]]],l=d[0][0]*d[1][1]-d[0][1]*d[1][0];if(l===0)return null;let U=[[d[1][1]/l,-d[0][1]/l],[-d[1][0]/l,d[0][0]/l]],p=[[U[0][0]*c[0][0]+U[0][1]*c[1][0]],[U[1][0]*c[0][0]+U[1][1]*c[1][0]]];t=t+p[0][0],n=n+p[1][0];let[m,b]=e(t,n);i=Math.max(Math.abs(m),Math.abs(b)),a+=1}return[t,n]}var Mr=(e,t)=>u((1-t)**3*e[0][0]+3*(1-t)**2*t*e[1][0]+3*(1-t)*t**2*e[2][0]+t**3*e[3][0],(1-t)**3*e[0][1]+3*(1-t)**2*t*e[1][1]+3*(1-t)*t**2*e[2][1]+t**3*e[3][1]);function Wi(e,t){let n=T6(e);if(ad(Tr(u(n[0],n[1]),u(n[2],n[3])),t).length===0)return[];let r=s=>u(t[0][0]+s*(t[1][0]-t[0][0]),t[0][1]+s*(t[1][1]-t[0][1])),o=[[.5,0],[.2,0],[.8,0]],i=([s,d])=>{let c=w6((p,m)=>{let b=Mr(e,p),E=r(m);return[b[0]-E[0],b[1]-E[1]]},s,d);if(!c)return null;let[l,U]=c;return l<0||l>1||U<0||U>1?null:Mr(e,l)},a=i(o[0]);return a?[a]:(a=i(o[1]),a?[a]:(a=i(o[2]),a?[a]:[]))}function R6(e,t,n=.001){let r=(c,l,U,p=n)=>{let m=c,b=l,E;for(;b-m>p;)E=(b+m)/2,U(E-p)<U(E+p)?b=E:m=E;return E},i=0;for(let c=1/0,l=0;l<30;l++){let U=ie(t,Mr(e,l/30));U<c&&(c=U,i=l)}let a=Math.max((i-1)/30,0),s=Math.min((i+1)/30,1),d=r(a,s,c=>ie(t,Mr(e,c)));return d?Mr(e,d):null}function zi(e,t){let n=R6(e,t);return n?ie(t,n):0}function T6(e){let[t,n,r,o]=e,i=[t[0],n[0],r[0],o[0]],a=[t[1],n[1],r[1],o[1]];return[Math.min(...i),Math.min(...a),Math.max(...i),Math.max(...a)]}function Qi(...e){return cd(e)}function Gn(e){return cd(e)}var ji=(e,t)=>{let n=e[0],r=e[1],o=!1;for(let i=0,a=t.length-1;i<t.length;a=i++){let s=t[i][0],d=t[i][1],c=t[a][0],l=t[a][1];(d>r&&l<=r||d<=r&&l>r)&&n<(c-s)*(r-d)/(l-d)+s&&(o=!o)}return o},dd=(e,t,n=1e-4)=>{let r=!1;for(let o=0,i=t.length-1;o<i;o++)if(Bt(e,A(t[o],t[o+1]),n)){r=!0;break}return r};function cd(e){return M6(e)?e:[...e,e[0]]}function M6(e){return _e(e[0],e[e.length-1])}function Oe(e,t){return tt([e,t])}var Lr=([e,t],[n,r])=>e<=n?t>=n:e>=n?r>=e:!1,Dr=([e,t],[n,r])=>{let o=Math.max(e,n),i=Math.min(t,r);return o<=i?tt([o,i]):null},Sr=(e,[t,n])=>e>=t&&e<=n;function Ln([e,t,n],r){let o=(l,U,p)=>(l[0]-p[0])*(U[1]-p[1])-(U[0]-p[0])*(l[1]-p[1]),i=o(r,e,t),a=o(r,t,n),s=o(r,n,e),d=i<0||a<0||s<0,c=i>0||a>0||s>0;return!(d&&c)}var ld=null;var ng=()=>{if(ld)return ld;let e=new Date,t=e.getFullYear(),n=`${e.getMonth()+1}`.padStart(2,"0"),r=`${e.getDate()}`.padStart(2,"0"),o=`${e.getHours()}`.padStart(2,"0"),i=`${e.getMinutes()}`.padStart(2,"0");return`${t}-${n}-${r}-${o}${i}`},rg=e=>e.charAt(0).toUpperCase()+e.slice(1),og=e=>e instanceof HTMLElement&&e.className.includes("ToolIcon"),D6=e=>e instanceof HTMLElement&&e.dataset.type==="wysiwyg"||e instanceof HTMLBRElement||e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement||e instanceof HTMLSelectElement,ig=e=>D6(e)||e instanceof Element&&!!e.closest("label, button"),ag=e=>e instanceof HTMLElement&&e.dataset.type==="wysiwyg"||e instanceof HTMLBRElement||e instanceof HTMLTextAreaElement||e instanceof HTMLInputElement&&(e.type==="text"||e.type==="number"||e.type==="password"),ea=({fontFamily:e})=>{for(let[t,n]of Object.entries(Ie))if(n===e)return`${t}${bo(n).map(r=>`, ${r}`).join("")}`;return Tn},Ee=({fontSize:e,fontFamily:t})=>`${e}px ${ea({fontFamily:t})}`,$o=(e,t)=>{let n=0,r=null,o=(...i)=>{r=i,clearTimeout(n),n=window.setTimeout(()=>{r=null,e(...i)},t)};return o.flush=()=>{if(clearTimeout(n),r){let i=r;r=null,e(...i)}},o.cancel=()=>{r=null,clearTimeout(n)},o},pd=(e,t)=>{let n=null,r=null,o=null,i=s=>{n=window.requestAnimationFrame(()=>{n=null,e(...s),r=null,o&&(r=o,o=null,i(r))})},a=(...s)=>{if(M.MODE==="test"){e(...s);return}r=s,n===null?i(r):t?.trailing&&(o=s)};return a.flush=()=>{n!==null&&(cancelAnimationFrame(n),n=null),r&&(e(...o||r),r=o=null)},a.cancel=()=>{r=o=null,n!==null&&(cancelAnimationFrame(n),n=null)},a},ud=e=>1-Math.pow(1-e,4),Ud=(e,t,n)=>(t-e)*ud(n)+e,sg=({fromValues:e,toValues:t,onStep:n,duration:r=250,interpolateValue:o,onStart:i,onEnd:a,onCancel:s})=>{let d=!1,c=0,l;function U(p){if(d)return;l===void 0&&(l=p,i?.());let m=Math.min(p-l,r),b=ud(m/r),E={};if(Object.keys(e).forEach(g=>{let h=g,x=(t[h]-e[h])*b+e[h];E[h]=x}),n(E),m<r){let g=m/r,h={};Object.keys(e).forEach(x=>{let y=x,w=e[y],I=t[y],S;S=o?o(w,I,g,y):Ud(w,I,g),S==null&&(S=Ud(w,I,g)),h[y]=S}),n(h),c=window.requestAnimationFrame(U)}else n(t),a?.()}return c=window.requestAnimationFrame(U),()=>{s?.(),d=!0,window.cancelAnimationFrame(c)}},dg=(e,t)=>{if(!e.length||t<1)return[];let n=0,r=0,o=Array(Math.ceil(e.length/t));for(;n<e.length;)o[r++]=e.slice(n,n+=t);return o};var dt=(e,t)=>Math.abs(e-t),$r=(e,t)=>t.type==="custom"?{...e.activeTool,type:"custom",customType:t.customType,locked:t.locked??e.activeTool.locked}:{...e.activeTool,lastActiveTool:t.lastActiveToolBeforeEraser===void 0?e.activeTool.lastActiveTool:t.lastActiveToolBeforeEraser,type:t.type,customType:null,locked:t.locked??e.activeTool.locked};var cg=e=>(e=e.replace(/\bAlt\b/i,"Alt").replace(/\bShift\b/i,"Shift").replace(/\b(Enter|Return)\b/i,"Enter"),uo?e.replace(/\bCtrlOrCmd\b/gi,"Cmd").replace(/\bAlt\b/i,"Option"):e.replace(/\bCtrlOrCmd\b/gi,"Ctrl")),Dn=({clientX:e,clientY:t},{zoom:n,offsetLeft:r,offsetTop:o,scrollX:i,scrollY:a})=>{let s=(e-r)/n.value-i,d=(t-o)/n.value-a;return{x:s,y:d}},ta=({sceneX:e,sceneY:t},{zoom:n,offsetLeft:r,offsetTop:o,scrollX:i,scrollY:a})=>{let s=(e+i)*n.value+r,d=(t+a)*n.value+o;return{x:s,y:d}},lg=e=>getComputedStyle(document.documentElement).getPropertyValue(`--${e}`),S6="A-Za-z\xC0-\xD6\xD8-\xF6\xF8-\u02B8\u0300-\u0590\u0800-\u1FFF\u2C00-\uFB1C\uFDFE-\uFE6F\uFEFD-\uFFFF",v6="\u0591-\u07FF\uFB1D-\uFDFD\uFE70-\uFEFC",$6=new RegExp(`^[^${S6}]*[${v6}]`),Po=e=>$6.test(e),un=e=>{let[t,n]=e;return{x:t,y:n}},Ug=e=>{if(e?.name==="AbortError"){console.warn(e);return}throw e},fg=(e,t,n=0)=>{n<0&&(n=e.length+n),n=Math.min(e.length,Math.max(n,0));let r=n-1;for(;++r<e.length;)if(t(e[r],r,e))return r;return-1},pg=(e,t,n=e.length-1)=>{n<0&&(n=e.length+n),n=Math.min(e.length-1,Math.max(n,0));let r=n+1;for(;--r>-1;)if(t(e[r],r,e))return r;return-1},Wt=e=>{let t=e.length===5&&e.substr(4,1)==="0",n=e.length===9&&e.substr(7,2)==="00";return t||n||e===Z.transparent},No=e=>e.fillStyle!=="solid"||Wt(e.backgroundColor),ug=()=>{let e,t,n=new Promise((r,o)=>{e=r,t=o});return n.resolve=e,n.reject=t,n};var mg=e=>{let t=e.parentElement;for(;t;){if(t===document.body)return document;let{overflowY:n}=window.getComputedStyle(t);if(t.scrollHeight>t.clientHeight&&(n==="auto"||n==="scroll"||n==="overlay"))return t;t=t.parentElement}return document},bg=e=>{let t=e.parentElement;for(;t;){if(t.tabIndex>-1){t.focus();return}t=t.parentElement}},Eg=e=>{e.preventDefault(),e.returnValue=""},md=e=>Array.from(e).map(t=>`0${t.toString(16)}`.slice(-2)).join(""),zt=()=>Ot()?1:Date.now(),te=e=>e instanceof Map?e:e.reduce((t,n)=>(t.set(typeof n=="string"?n:n.id,n),t),new Map),gg=e=>e.reduce((t,n,r)=>(t.set(n.id,[n,r]),t),new Map),_t=(e,t)=>e.reduce((n,r)=>(n[t?t(r):String(r)]=r,n),{}),xg=e=>e.reduce((t,n,r)=>{let o={...n,prev:null,next:null};if(r!==0){let i=t[r-1];if(o.prev=i,i.next=o,r===e.length-1){let a=t[0];o.next=a,a.prev=o}}return t.push(o),t},[]),Ot=()=>M.MODE==="test",hg=()=>M.MODE==="development",bd=()=>typeof process<"u"&&!0,yg=(e,t)=>new CustomEvent(e,{detail:{nativeEvent:t},cancelable:!0}),Ig=(e,t)=>{let n=!1;for(let r in t){let o=t[r];if(typeof o<"u"){if(e[r]===o&&(typeof o!="object"||o===null))continue;n=!0}}return n?{...e,...t}:e};var wg=()=>{try{return window.self===window.top?"top":"iframe"}catch{return"iframe"}};var Fo=e=>!!e&&typeof e=="object"&&"then"in e&&"catch"in e&&"finally"in e,Rg=e=>{let t=e?.querySelectorAll("button, a, input, select, textarea, div[tabindex], label[tabindex]");return t?Array.from(t).filter(n=>n.tabIndex>-1&&!n.disabled):[]},fd=(e,t)=>Array.isArray(e)&&Array.isArray(t)&&e.length===0&&t.length===0?!0:e===t,Qt=(e,t,n,r=!1)=>{let o=Object.keys(e),i=Object.keys(t);if(o.length!==i.length)return r&&console.warn("%cisShallowEqual: objects don't have same properties ->","color: #8B4000",e,t),!1;if(n&&Array.isArray(n)){for(let a of n)if(!(e[a]===t[a]||fd(e[a],t[a])))return r&&console.warn(`%cisShallowEqual: ${a} not equal ->`,"color: #8B4000",e[a],t[a]),!1;return!0}return o.every(a=>{let s=n?.[a],d=s?s(e[a],t[a]):e[a]===t[a]||fd(e[a],t[a]);return!d&&r&&console.warn(`%cisShallowEqual: ${a} not equal ->`,"color: #8B4000",e[a],t[a]),d})},Tg=(e,t,{checkForDefaultPrevented:n=!0}={})=>function(o){if(e?.(o),!n||!o?.defaultPrevented)return t?.(o)},Sn=(e,t,n)=>{if(!t)return e;if(n)return console.error(t),e;throw new Error(t)};function Ae(e,t){if(!e)throw new Error(t)}var Mg=e=>{let t,n,r=function(o){let i=Object.entries(o);if(t){let s=!0;for(let[d,c]of i)if(t.get(d)!==c){s=!1;break}if(s)return n}let a=e(o);return t=new Map(i),n=a,a};return r.clear=()=>{t=void 0,n=void 0},r},Ed=(e,t)=>e instanceof Set||e instanceof Map?e.has(t):"includes"in e?e.includes(t):e.hasOwnProperty(t),Lg=e=>JSON.parse(JSON.stringify(e)),Dg=(e,t)=>Qt(e,t)?e:t;function Sg(e,t,n,r){return e?(e?.addEventListener?.(t,n,r),()=>{e?.removeEventListener?.(t,n,r)}):()=>{}}function vg(e,t=!0){let n=e.length;if(n<4)return"";let r=e[0],o=e[1],i=e[2],a=`M${r[0].toFixed(2)},${r[1].toFixed(2)} Q${o[0].toFixed(2)},${o[1].toFixed(2)} ${xr(o[0],i[0]).toFixed(2)},${xr(o[1],i[1]).toFixed(2)} T`;for(let s=2,d=n-1;s<d;s++)r=e[s],o=e[s+1],a+=`${xr(r[0],o[0]).toFixed(2)},${xr(r[1],o[1]).toFixed(2)} `;return t&&(a+="Z"),a}var gd=e=>e.replace(/\r?\n|\r/g,`
`),tt=e=>e,mn=async(e,...t)=>new Promise(n=>{n(e(...t))}),xd=(...e)=>Math.max(...e.map(t=>t?1:0))>0;var vr=class{constructor(t,n){P(this,"pool");P(this,"entries",{});this.pool=new L6(t,n)}all(){let t=n=>{if(n.data.result){let[r,o]=n.data.result;this.entries[r]=o}};return this.pool.addEventListener("fulfilled",t),this.pool.start().then(()=>(setTimeout(()=>{this.pool.removeEventListener("fulfilled",t)}),Object.values(this.entries)))}},kn=e=>e.replace(/"/g,"&quot;"),$g=e=>Array.isArray(e)?e:[e];var At=e=>!!e&&e.type==="image"&&!!e.fileId,Ye=e=>!!e&&e.type==="image",Bo=e=>!!e&&e.type==="embeddable",_o=e=>!!e&&e.type==="iframe",gt=e=>!!e&&(e.type==="iframe"||e.type==="embeddable"),k=e=>e!=null&&e.type==="text",hd=e=>e!=null&&e.type==="frame",yd=e=>e!=null&&e.type==="magicframe",de=e=>e!=null&&(e.type==="frame"||e.type==="magicframe"),Ce=e=>e!=null&&P6(e.type),P6=e=>e==="freedraw",ae=e=>e!=null&&na(e.type),ee=e=>e!=null&&e.type==="arrow",X=e=>ee(e)&&e.elbowed,na=e=>e==="arrow"||e==="line",Pr=(e,t=!0)=>e!=null&&(!e.locked||t===!0)&&N6(e.type),N6=e=>e==="arrow",xt=(e,t=!0)=>e!=null&&(!e.locked||t===!0)&&(e.type==="rectangle"||e.type==="diamond"||e.type==="ellipse"||e.type==="image"||e.type==="iframe"||e.type==="embeddable"||e.type==="frame"||e.type==="magicframe"||e.type==="text"&&!e.containerId),Id=e=>e!=null&&(e.type==="rectangle"||e.type==="diamond"||e.type==="image"||e.type==="iframe"||e.type==="embeddable"||e.type==="frame"||e.type==="magicframe"||e.type==="text"&&!e.containerId);var F6=(e,t=!0)=>e!=null&&(!e.locked||t===!0)&&(e.type==="rectangle"||e.type==="diamond"||e.type==="ellipse"||ee(e)),ra=e=>{let t=e?.type;if(!t)return!1;switch(t){case"text":case"diamond":case"rectangle":case"iframe":case"embeddable":case"ellipse":case"arrow":case"freedraw":case"line":case"frame":case"magicframe":case"image":case"selection":return!0;default:return Sn(t,null),!1}},Og=e=>e.type==="rectangle"||e.type==="ellipse"||e.type==="diamond",bn=e=>F6(e)&&!!e.boundElements?.some(({type:t})=>t==="text"),Ne=e=>e!==null&&"containerId"in e&&e.containerId!==null&&k(e),Oo=e=>e==="rectangle"||e==="embeddable"||e==="iframe"||e==="image",wd=e=>e==="line"||e==="arrow"||e==="diamond",Ag=(e,t)=>!!((e===ot.ADAPTIVE_RADIUS||e===ot.LEGACY)&&Oo(t.type)||e===ot.PROPORTIONAL_RADIUS&&wd(t.type)),Kg=e=>wd(e.type)?{type:ot.PROPORTIONAL_RADIUS}:Oo(e.type)?{type:ot.ADAPTIVE_RADIUS}:null,vn=e=>Object.hasOwn(e,"fixedPoint")&&e.fixedPoint!=null;var ht=(e,t,n)=>{let r=e.split(`
`).map(s=>s||" ").join(`
`),o=parseFloat(t),i=B6(r,o,n);return{width:Dd(r,t),height:i}},Rd="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toLocaleUpperCase(),Td=(e,t)=>{let n=_6(e);return n===0?ht(Rd.split("").join(`
diff --git a/dist/types/excalidraw/constants.d.ts b/dist/types/excalidraw/constants.d.ts
index 8ef7e5a74d950ff37becb3a305beebe3deb69115..8e2be1f00b12686f611150d82587fbf7c2f1a7fd 100644
--- a/dist/types/excalidraw/constants.d.ts
+++ b/dist/types/excalidraw/constants.d.ts
@@ -256,9 +256,9 @@ export declare const ROUGHNESS: {
readonly cartoonist: 2;
};
export declare const STROKE_WIDTH: {
- readonly thin: 1;
- readonly bold: 2;
- readonly extraBold: 4;
+ readonly thin: 0.5;
+ readonly bold: 0.75;
+ readonly extraBold: 1;
};
export declare const DEFAULT_ELEMENT_PROPS: {
strokeColor: ExcalidrawElement["strokeColor"];
diff --git a/dist/dev/index.js b/dist/dev/index.js
--- a/dist/dev/index.js
+++ b/dist/dev/index.js
@@ -24789,7 +24789,7 @@
iframeLikes.add(element.id);
if (!this.embedsValidationStatus.has(element.id)) {
updated = true;
- const validated = embeddableURLValidator(
+ const validated = this.props.renderEmbeddable?.(element, this.state) != null || embeddableURLValidator(
element.link,
this.props.validateEmbeddable
);
@@ -29600,7 +29600,7 @@
const normalizedWidth = this.state.width;
const normalizedHeight = this.state.height;
const embeddableElements = this.scene.getNonDeletedElements().filter(
- (el) => isEmbeddableElement(el) && this.embedsValidationStatus.get(el.id) === true || isIframeElement(el)
+ (el) => isEmbeddableElement(el) && (this.embedsValidationStatus.get(el.id) === true || this.props.renderEmbeddable?.(el, this.state) != null) || isIframeElement(el)
);
return /* @__PURE__ */ jsx147(Fragment23, { children: embeddableElements.map((el) => {
const { x, y } = sceneCoordsToViewportCoords(
diff --git a/dist/prod/index.js b/dist/prod/index.js
--- a/dist/prod/index.js
+++ b/dist/prod/index.js
@@ -11,7 +11,7 @@
C -->|Two| E[iPhone]
C -->|Three| F[Car]`,t1=$r(el,300),VA=({mermaidToExcalidrawLib:e})=>{let[o,t]=q0(()=>ro.get(cr.MERMAID_TO_EXCALIDRAW)||YA),r=GA(o.trim()),[n,i]=q0(null),a=Q0(null),l=Q0({elements:[],files:null}),s=He();e1(()=>{gd({canvasRef:a,data:l,mermaidToExcalidrawLib:e,setError:i,mermaidDefinition:r}).catch(m=>{Dl()&&console.error("Failed to parse mermaid definition",m)}),t1(r)},[r,e]),e1(()=>()=>{t1.flush()},[]);let c=()=>{hd({app:s,data:l,text:o,shouldSaveMermaidDataToStorage:!0})};return o1(WA,{children:[zo("div",{className:"ttd-dialog-desc",children:zo(Tt,{i18nKey:"mermaid.description",flowchartLink:m=>zo("a",{href:"https://mermaid.js.org/syntax/flowchart.html",children:m}),sequenceLink:m=>zo("a",{href:"https://mermaid.js.org/syntax/sequenceDiagram.html",children:m}),classLink:m=>zo("a",{href:"https://mermaid.js.org/syntax/classDiagram.html",children:m})})}),o1(fd,{children:[zo(Vi,{label:g("mermaid.syntax"),children:zo(bd,{input:o,placeholder:"Write Mermaid diagram defintion here...",onChange:m=>t(m.target.value),onKeyboardSubmit:()=>{c()}})}),zo(Vi,{label:g("mermaid.preview"),panelAction:{action:()=>{c()},label:g("mermaid.button"),icon:ti},renderSubmitShortcut:()=>zo(yd,{}),children:zo(Ed,{canvasRef:a,loaded:e.loaded,error:n})})]})]})},r1=VA;import*as i1 from"@radix-ui/react-tabs";import{useRef as n1}from"react";import{jsx as KA}from"react/jsx-runtime";var a1=e=>{let o=pe(),t=n1(null),r=n1(0);return KA(i1.Root,{ref:t,className:"ttd-dialog-tabs-root",value:e.tab,onValueChange:n=>{if(!n)return;let i=t.current?.closest(".Modal__content");if(i){let a=i.offsetHeight||0;a>r.current&&(r.current=a,i.style.minHeight=`min(${r.current}px, 100%)`)}e.dialog==="ttd"&&Kh(["text-to-diagram","mermaid"],n)&&o({openDialog:{name:e.dialog,tab:n}})},children:e.children})};a1.displayName="TTDDialogTabs";var l1=a1;import{useEffect as ZA,useRef as pg,useState as Td}from"react";import*as s1 from"@radix-ui/react-tabs";import{jsx as XA}from"react/jsx-runtime";var mg=({children:e,...o})=>XA(s1.List,{className:"ttd-dialog-triggers",...o,children:e});mg.displayName="TTDDialogTabTriggers";import*as d1 from"@radix-ui/react-tabs";import{jsx as c1}from"react/jsx-runtime";var vd=({children:e,tab:o,onSelect:t,...r})=>c1(d1.Trigger,{value:o,asChild:!0,onSelect:t,children:c1("button",{type:"button",className:"ttd-dialog-tab-trigger",...r,children:e})});vd.displayName="TTDDialogTabTrigger";import*as m1 from"@radix-ui/react-tabs";import{jsx as $A}from"react/jsx-runtime";var wd=({tab:e,children:o,...t})=>$A(m1.Content,{...t,value:e,children:o});wd.displayName="TTDDialogTab";import{jsx as It,jsxs as Br}from"react/jsx-runtime";var ug=3,Wi=1e3,jA=ye(null),JA=ye(null),gg=e=>{let o=ve();return o.openDialog?.name!=="ttd"?null:It(qA,{...e,tab:o.openDialog.tab})},qA=ar("TTDDialogBase",({tab:e,...o})=>{let t=He(),r=pe(),n=pg(null),[i,a]=ce(JA),[l,s]=Td(i?.prompt??""),c=l.trim(),m=I=>{s(I.target.value),a(_=>({generatedResponse:_?.generatedResponse??null,prompt:I.target.value}))},[d,p]=Td(!1),[u,h]=ce(jA),f=async()=>{if(c.length>Wi||c.length<ug||d||u?.rateLimitRemaining===0||"__fallback"in o){c.length<ug&&S(new Error(`Prompt is too short (min ${ug} characters)`)),c.length>Wi&&S(new Error(`Prompt is too long (max ${Wi} characters)`));return}try{p(!0),le("ai","generate","ttd");let{generatedResponse:I,error:_,rateLimit:k,rateLimitRemaining:R}=await o.onTextSubmit(c);if(typeof I=="string"&&a(M=>({generatedResponse:I,prompt:M?.prompt??null})),Jd(k)&&Jd(R)&&h({rateLimit:k,rateLimitRemaining:R}),_){S(_);return}if(!I){S(new Error("Generation failed"));return}try{await gd({canvasRef:n,data:E,mermaidToExcalidrawLib:x,setError:S,mermaidDefinition:I}),le("ai","mermaid parse success","ttd")}catch(M){console.info(`%cTTD mermaid render errror: ${M.message}`,"color: red"),console.info(`>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
TTD mermaid definition render errror: ${M.message}`,"color: yellow"),le("ai","mermaid parse failed","ttd"),S(new Error("Generated an invalid diagram :(. You may also try a different prompt."))}}catch(I){let _=I.message;(!_||_==="Failed to fetch")&&(_="Request failed"),S(new Error(_))}finally{p(!1)}},b=pg(f);b.current=f;let[x,T]=Td({loaded:!1,api:import("@excalidraw/mermaid-to-excalidraw")});ZA(()=>{(async()=>{await x.api,T(_=>({..._,loaded:!0}))})()},[x.api]);let E=pg({elements:[],files:null}),[w,S]=Td(null);return It(Ge,{className:"ttd-dialog",onCloseRequest:()=>{t.setOpenDialog(null)},size:1200,title:!1,...o,autofocus:!1,children:Br(l1,{dialog:"ttd",tab:e,children:["__fallback"in o&&o.__fallback?It("p",{className:"dialog-mermaid-title",children:g("mermaid.title")}):Br(mg,{children:[It(vd,{tab:"text-to-diagram",children:Br("div",{style:{display:"flex",alignItems:"center"},children:[g("labels.textToDiagram"),It("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",padding:"1px 6px",marginLeft:"10px",fontSize:10,borderRadius:"12px",background:"var(--color-promo)",color:"var(--color-surface-lowest)"},children:"AI Beta"})]})}),It(vd,{tab:"mermaid",children:"Mermaid"})]}),It(wd,{className:"ttd-dialog-content",tab:"mermaid",children:It(r1,{mermaidToExcalidrawLib:x})}),!("__fallback"in o)&&Br(wd,{className:"ttd-dialog-content",tab:"text-to-diagram",children:[It("div",{className:"ttd-dialog-desc",children:"Currently we use Mermaid as a middle step, so you'll get best results if you describe a diagram, workflow, flow chart, and similar."}),Br(fd,{children:[It(Vi,{label:g("labels.prompt"),panelAction:{action:f,label:"Generate",icon:ti},onTextSubmitInProgess:d,panelActionDisabled:c.length>Wi||u?.rateLimitRemaining===0,renderTopRight:()=>u?Br("div",{className:"ttd-dialog-rate-limit",style:{fontSize:12,marginLeft:"auto",color:u.rateLimitRemaining===0?"var(--color-danger)":void 0},children:[u.rateLimitRemaining," requests left today"]}):null,renderSubmitShortcut:()=>It(yd,{}),renderBottomRight:()=>{if(typeof i?.generatedResponse=="string")return Br("div",{className:"excalidraw-link",style:{marginLeft:"auto",fontSize:14},onClick:()=>{typeof i?.generatedResponse=="string"&&(el(i.generatedResponse),r({openDialog:{name:"ttd",tab:"mermaid"}}))},children:["View as Mermaid",It(Lr,{icon:ti})]});let I=c.length/Wi;return I>.8?Br("div",{style:{marginLeft:"auto",fontSize:12,fontFamily:"monospace",color:I>1?"var(--color-danger)":void 0},children:["Length: ",c.length,"/",Wi]}):null},children:It(bd,{onChange:m,input:l,placeholder:"Describe what you want to see...",onKeyboardSubmit:()=>{b.current()}})}),It(Vi,{label:"Preview",panelAction:{action:()=>{console.info("Panel action clicked"),hd({app:t,data:E})},label:"Insert",icon:ti},children:It(Ed,{canvasRef:n,error:w,loaded:x.loaded})})]})]})]})})});import{useEffect as I1,useMemo as yg,useState as G_,memo as Y_}from"react";import V_ from"lodash.throttle";import{useEffect as u1,useRef as Id,useState as QA}from"react";import e_ from"clsx";var p1=.01,Pt=(e,o)=>!(o==="height"&&Y(e)||o==="width"&&Y(e)||o==="angle"&&ie(e)),Oe=(e,o)=>{let t=e+o/2;return t-t%o},Ki=(e,o,t)=>Object.keys(e).map(r=>({original:(t??o).get(r),latest:o.get(r)})).filter(r=>r.original!==void 0&&r.latest!==void 0);var Ln=(e,o,t,r,n,i,a,l=!0)=>{let s=r.get(t.id);if(!s)return;let[c,m]=[t.x+t.width/2,t.y+t.height/2],[d,p]=bt(z(t.x,t.y),z(c,m),t.angle),u=e-d,h=o-p,[f,b]=bt(z(e,o),z(c+u,m+h),-t.angle);P(s,{x:f,y:b},l),Cd(s,r,n,i);let x=ue(t,a);if(x){let T=r.get(x.id);T&&P(T,{x:x.x+u,y:x.y+h},l)}},Xi=(e,o)=>{let r=po(o).map(n=>Le(e,n).reduce((i,a)=>(i[a.id]=!0,i),{}));return e.filter(n=>!hr(n)).forEach(n=>{r.push({[n.id]:!0})}),r},Cd=(e,o,t,r,n)=>{he(e)?cn([e],o,t,r,!0,[],n?.zoom):Jt(e,o,n)};import{jsx as hg,jsxs as o_}from"react/jsx-runtime";var t_=({label:e,icon:o,dragInputCallback:t,value:r,elements:n,editable:i=!0,shouldKeepAspectRatio:a,property:l,scene:s,appState:c,sensitivity:m=1})=>{let d=He(),p=Id(null),u=Id(null),[h,f]=QA(r.toString()),b=Id(null);b.current||(b.current={originalAppState:At(c),originalElements:n,lastUpdatedValue:h,updatePending:!1}),u1(()=>{let E=r.toString();f(E),b.current.lastUpdatedValue=E},[r]);let x=(E,w,S)=>{if(!b.current.updatePending)return!1;b.current.updatePending=!1;let I=Number(E);if(isNaN(I)){f(r.toString());return}let _=Number(I.toFixed(2)),k=Number(r);(isNaN(k)||Math.abs(_-k)>=p1)&&(b.current.lastUpdatedValue=E,t({accumulatedChange:0,instantChange:0,originalElements:w,originalElementsMap:d.scene.getNonDeletedElementsMap(),shouldKeepAspectRatio:a,shouldChangeByStepSize:!1,scene:s,nextValue:_,property:l,originalAppState:S,setInputValue:R=>f(String(R))}),d.syncActionResult({captureUpdate:L.IMMEDIATELY}))},T=Id({});return T.current.handleInputValue=x,u1(()=>{let E=p.current,w=T.current;return()=>{let S=E?.value;S&&w.handleInputValue?.(S,b.current.originalElements,b.current.originalAppState),window.removeEventListener("pointermove",w.onPointerMove,!1),window.removeEventListener("pointerup",w.onPointerUp,!1)}},[i]),i?o_("div",{className:e_("drag-input-container",!i&&"disabled"),"data-testid":e,children:[hg("div",{className:"drag-input-label",ref:u,onPointerDown:E=>{if(p.current&&i){document.body.classList.add("excalidraw-cursor-resize");let w=Number(p.current.value);isNaN(w)&&(w=0);let S=null,I=d.scene.getNonDeletedElements().reduce((H,V)=>(H.set(V.id,xr(V)),H),new Map),_=n.map(H=>I.get(H.id)),k=At(c),R=0,M=0,N=H=>{if(S&&I!==null&&_!==null){let V=H.clientX-S.x;V!==0&&(M+=V,Math.abs(M)>=m&&(M=Math.sign(M)*Math.floor(Math.abs(M)/m),R+=M,t({accumulatedChange:R,instantChange:M,originalElements:_,originalElementsMap:I,shouldKeepAspectRatio:a,shouldChangeByStepSize:H.shiftKey,property:l,scene:s,originalAppState:k,setInputValue:F=>f(String(F))}),M=0))}S={x:H.clientX,y:H.clientY}},G=()=>{window.removeEventListener("pointermove",N,!1),d.syncActionResult({captureUpdate:L.IMMEDIATELY}),S=null,R=0,M=0,_=null,I=null,document.body.classList.remove("excalidraw-cursor-resize"),window.removeEventListener("pointerup",G,!1)};T.current.onPointerMove=N,T.current.onPointerUp=G,window.addEventListener("pointermove",N,!1),window.addEventListener("pointerup",G,!1)}},onPointerEnter:()=>{u.current&&(u.current.style.cursor="ew-resize")},children:o?hg(Lr,{icon:o}):e}),hg("input",{className:"drag-input",autoComplete:"off",spellCheck:"false",onKeyDown:E=>{if(i){let w=E.target;w instanceof HTMLInputElement&&E.key===y.ENTER&&(x(w.value,n,c),d.focusContainer())}},ref:p,value:h,onChange:E=>{b.current.updatePending=!0,f(E.target.value)},onFocus:E=>{E.target.select(),b.current.originalElements=n,b.current.originalAppState=At(c)},onBlur:E=>{h?i&&x(E.target.value,b.current.originalElements,b.current.originalAppState):f(r.toString())},disabled:!i})]}):null},at=t_;import{jsx as a_}from"react/jsx-runtime";var g1=10,r_=e=>e.type==="image",n_=({accumulatedChange:e,originalElements:o,originalElementsMap:t,shouldKeepAspectRatio:r,shouldChangeByStepSize:n,nextValue:i,property:a,originalAppState:l,instantChange:s,scene:c})=>{let m=c.getNonDeletedElementsMap(),d=o[0],p=m.get(d.id);if(d&&p){let u=r||r_(d),h=d.width/d.height;if(l.croppingElementId===d.id){let E=m.get(d.id);if(!E||!xe(E)||!E.crop)return;let w=E.crop,S={...w},I=E.scale[0]===-1,_=E.scale[1]===-1,{width:k,height:R}=mn(E),M=w.naturalWidth/k,N=w.naturalHeight/R,G=I?w.width+w.x:w.naturalWidth-w.x,H=_?w.height+w.y:w.naturalHeight-w.y,V=Mm*M,F=Mm*N;if(i!==void 0){if(a==="width"){let ne=i*M,ge=ot(ne,V,G);S={...S,width:ge,x:I?w.x+w.width-ge:w.x}}else if(a==="height"){let ne=i*N,ge=ot(ne,F,H);S={...S,height:ge,y:_?w.y+w.height-ge:w.y}}P(E,{crop:S,width:S.width/(w.naturalWidth/k),height:S.height/(w.naturalHeight/R)});return}let O=a==="width"?s:0,j=a==="height"?s:0,oe=ot(w.width+O,V,G),W=ot(w.height+j,V,H);S={...w,x:I?w.x+w.width-oe:w.x,y:_?w.y+w.height-W:w.y,width:oe,height:W},P(E,{crop:S,width:S.width/(w.naturalWidth/k),height:S.height/(w.naturalHeight/R)});return}if(i!==void 0){let E=Math.max(a==="width"?i:u?i*h:d.width,Lt),w=Math.max(a==="height"?i:u?i/h:d.height,Lt);hi(E,w,p,d,m,t,a==="width"?"e":"s",{shouldMaintainAspectRatio:u});return}let f=a==="width"?e:0,b=a==="height"?e:0,x=Math.max(0,d.width+f);a==="width"&&(n?x=Oe(x,g1):x=Math.round(x));let T=Math.max(0,d.height+b);a==="height"&&(n?T=Oe(T,g1):T=Math.round(T)),u&&(a==="width"?T=Math.round(x/h*100)/100:x=Math.round(T*h*100)/100),T=Math.max(Lt,T),x=Math.max(Lt,x),hi(x,T,p,d,m,t,a==="width"?"e":"s",{shouldMaintainAspectRatio:u})}},i_=({property:e,element:o,scene:t,appState:r})=>{let n=Xt(e==="width"?o.width:o.height,2);if(r.croppingElementId&&r.croppingElementId===o.id&&xe(o)&&o.crop){let{width:i,height:a}=mn(o);if(e==="width"){let l=i/o.crop.naturalWidth;n=Xt(o.crop.width*l,2)}if(e==="height"){let l=a/o.crop.naturalHeight;n=Xt(o.crop.height*l,2)}}return a_(at,{label:e==="width"?"W":"H",elements:[o],dragInputCallback:n_,value:n,editable:Pt(o,e),scene:t,appState:r,property:e})},fg=i_;import{jsx as d_}from"react/jsx-runtime";var l_=15,s_=({accumulatedChange:e,originalElements:o,shouldChangeByStepSize:t,nextValue:r,scene:n})=>{let i=n.getNonDeletedElementsMap(),a=n.getNonDeletedElements(),l=o[0];if(l&&!ee(l)){let s=i.get(l.id);if(!s)return;if(r!==void 0){let h=Bn(r);P(s,{angle:h}),Cd(s,i,a,n);let f=ue(s,i);f&&!Ne(s)&&P(f,{angle:h});return}let c=Math.round(zn(l.angle)*100)/100,m=Math.round(e),d=(c+m)%360;t&&(d=Oe(d,l_)),d=d<0?d+360:d;let p=Bn(d);P(s,{angle:p}),Cd(s,i,a,n);let u=ue(s,i);u&&!Ne(s)&&P(u,{angle:p})}},c_=({element:e,scene:o,appState:t,property:r})=>d_(at,{label:"A",icon:$l,value:Math.round(zn(e.angle)%360*100)/100,elements:[e],dragInputCallback:s_,editable:Pt(e,"angle"),scene:o,appState:t,property:r}),h1=c_;import{jsx as g_}from"react/jsx-runtime";var f1=4,m_=4,p_=({accumulatedChange:e,originalElements:o,shouldChangeByStepSize:t,nextValue:r,scene:n})=>{let i=n.getNonDeletedElementsMap(),a=o[0];if(a){let l=i.get(a.id);if(!l||!Y(l))return;let s;if(r!==void 0)s=Math.max(Math.round(r),f1);else if(a.type==="text"){let c=Math.round(a.fontSize),m=Math.round(e);s=Math.max(c+m,f1),t&&(s=Oe(s,m_))}s&&(P(l,{fontSize:s}),Ue(l,n.getContainerElement(l),n.getNonDeletedElementsMap()))}},u_=({element:e,scene:o,appState:t,property:r})=>{let n=Y(e)?e:ut(e)?ue(e,o.getNonDeletedElementsMap()):null;return n?g_(at,{label:"F",value:Math.round(n.fontSize*10)/10,elements:[n],dragInputCallback:p_,icon:nn,appState:t,scene:o,property:r}):null},b1=u_;import{useMemo as h_}from"react";import{jsx as y_}from"react/jsx-runtime";var $i=10,f_=(e,o,t,r)=>{let n=r.x-e,i=r.y-o,a=r.width*t,l=r.height*t,s=e+n*t,c=o+i*t;return{width:a,height:l,x:s,y:c,...PE(r,a,l,!1),...Y(r)?{fontSize:r.fontSize*t}:{}}},b_=(e,o,t,r,n,i,a,l)=>{let s=f_(e,o,r,i);P(n,s,!1);let c=ue(i,l);if(c){let m=c.fontSize*r;Jt(n,a,{newSize:{width:s.width,height:s.height}});let d=a.get(c.id);d&&Y(d)&&(P(d,{fontSize:m},!1),yE(n,a,t==="width"?"e":"s",!0))}},x1=(e,o,t,r,n,i,a,l,s,c)=>{i==="width"?o=Math.round(e/r*100)/100:e=Math.round(o*r*100)/100;let m=o/t;for(let d=0;d<l.length;d++){let p=l[d],u=a[d];b_(n[0],n[1],i,m,u,p,s,c)}},x_=({accumulatedChange:e,originalElements:o,originalElementsMap:t,originalAppState:r,shouldChangeByStepSize:n,nextValue:i,scene:a,property:l})=>{let s=a.getNonDeletedElementsMap(),c=Xi(o,r);if(i!==void 0){for(let p of c){let u=Ki(p,s,t);if(u.length>1){let h=u.map(R=>R.latest),f=u.map(R=>R.original),[b,x,T,E]=Se(f),w=T-b,S=E-x,I=w/S,_=Math.max(Lt,l==="width"?Math.max(0,i):w),k=Math.max(Lt,l==="height"?Math.max(0,i):S);x1(_,k,S,I,z(b,x),l,h,f,s,t)}else{let[h]=u,f=h?.latest,b=h?.original;if(f&&b&&Pt(f,l)){let x=l==="width"?Math.max(0,i):f.width;l==="width"&&(n?x=Oe(x,$i):x=Math.round(x));let T=l==="height"?Math.max(0,i):f.height;l==="height"&&(n?T=Oe(T,$i):T=Math.round(T)),x=Math.max(Lt,x),T=Math.max(Lt,T),hi(x,T,f,b,s,t,l==="width"?"e":"s",{shouldInformMutation:!1})}}}a.triggerUpdate();return}let m=l==="width"?e:0,d=l==="height"?e:0;for(let p of c){let u=Ki(p,s,t);if(u.length>1){let h=u.map(R=>R.latest),f=u.map(R=>R.original),[b,x,T,E]=Se(f),w=T-b,S=E-x,I=w/S,_=Math.max(0,w+m);l==="width"&&(n?_=Oe(_,$i):_=Math.round(_));let k=Math.max(0,S+d);l==="height"&&(n?k=Oe(k,$i):k=Math.round(k)),_=Math.max(Lt,_),k=Math.max(Lt,k),x1(_,k,S,I,z(b,x),l,h,f,s,t)}else{let[h]=u,f=h?.latest,b=h?.original;if(f&&b&&Pt(f,l)){let x=Math.max(0,b.width+m);l==="width"&&(n?x=Oe(x,$i):x=Math.round(x));let T=Math.max(0,b.height+d);l==="height"&&(n?T=Oe(T,$i):T=Math.round(T)),x=Math.max(Lt,x),T=Math.max(Lt,T),hi(x,T,f,b,s,t,l==="width"?"e":"s",{shouldInformMutation:!1})}}}a.triggerUpdate()},E_=({property:e,elements:o,elementsMap:t,atomicUnits:r,scene:n,appState:i})=>{let a=h_(()=>r.map(c=>{let m=Ki(c,t);if(m.length>1){let[p,u,h,f]=Se(m.map(b=>b.latest));return Math.round((e==="width"?h-p:f-u)*100)/100}let[d]=m;return Math.round((e==="width"?d.latest.width:d.latest.height)*100)/100}),[t,r,e]),l=new Set(a).size===1?Math.round(a[0]*100)/100:"Mixed",s=a.length>0;return y_(at,{label:e==="width"?"W":"H",elements:o,dragInputCallback:x_,value:l,editable:s,appState:i,property:e,scene:n})},bg=E_;import{jsx as C_}from"react/jsx-runtime";var v_=15,w_=({accumulatedChange:e,originalElements:o,shouldChangeByStepSize:t,nextValue:r,property:n,scene:i})=>{let a=i.getNonDeletedElementsMap(),l=o.map(c=>a.get(c.id)).filter(c=>c&&!hr(c)&&Pt(c,n)),s=o.filter(c=>!hr(c)&&Pt(c,n));if(r!==void 0){let c=Bn(r);for(let m of l){if(!m)continue;P(m,{angle:c},!1);let d=ue(m,a);d&&!Ne(m)&&P(d,{angle:c},!1)}i.triggerUpdate();return}for(let c=0;c<l.length;c++){let m=l[c];if(!m)continue;let d=s[c],p=Math.round(zn(d.angle)*100)/100,u=Math.round(e),h=(p+u)%360;t&&(h=Oe(h,v_)),h=h<0?h+360:h;let f=Bn(h);P(m,{angle:f},!1);let b=ue(m,a);b&&!Ne(m)&&P(b,{angle:f},!1)}i.triggerUpdate()},T_=({elements:e,scene:o,appState:t,property:r})=>{let n=e.filter(s=>!hr(s)&&Pt(s,"angle")),i=n.map(s=>Math.round(zn(s.angle)%360*100)/100),a=new Set(i).size===1?i[0]:"Mixed",l=n.some(s=>Pt(s,"angle"));return C_(at,{label:"A",icon:$l,value:a,elements:e,dragInputCallback:w_,editable:l,appState:t,scene:o,property:r})},E1=T_;import{jsx as A_}from"react/jsx-runtime";var y1=4,I_=4,S_=(e,o)=>e.reduce((t,r)=>{if(!r||hr(r))return t;if(Y(r))return t.push(r),t;if(ut(r)){let n=ue(r,o);if(n)return t.push(n),t}return t},[]),k_=({accumulatedChange:e,originalElements:o,shouldChangeByStepSize:t,nextValue:r,scene:n})=>{let i=n.getNonDeletedElementsMap(),a=o.map(s=>i.get(s.id)),l;if(r){l=Math.max(Math.round(r),y1);for(let s of a)P(s,{fontSize:l},!1),Ue(s,n.getContainerElement(s),i,!1);n.triggerUpdate()}else{let s=o;for(let c=0;c<a.length;c++){let m=a[c],d=s[c],p=Math.round(d.fontSize),u=Math.round(e),h=Math.max(p+u,y1);t&&(h=Oe(h,I_)),P(m,{fontSize:h},!1),Ue(m,n.getContainerElement(m),i,!1)}n.triggerUpdate()}},L_=({elements:e,scene:o,appState:t,property:r,elementsMap:n})=>{let i=S_(e,n);if(!i.length)return null;let a=i.map(c=>Math.round(c.fontSize*10)/10),l=new Set(a).size===1?a[0]:"Mixed",s=a.length>0;return A_(at,{label:"F",icon:nn,elements:i,dragInputCallback:k_,value:l,editable:s,scene:o,property:r,appState:t})},v1=L_;import{jsx as D_}from"react/jsx-runtime";var w1=10,__=({accumulatedChange:e,instantChange:o,originalElements:t,originalElementsMap:r,shouldChangeByStepSize:n,nextValue:i,property:a,scene:l,originalAppState:s})=>{let c=l.getNonDeletedElementsMap(),m=l.getNonDeletedElements(),d=t[0],[p,u]=[d.x+d.width/2,d.y+d.height/2],[h,f]=bt(z(d.x,d.y),z(p,u),d.angle);if(s.croppingElementId===d.id){let w=c.get(d.id);if(!w||!xe(w)||!w.crop)return;let S=w.crop,I=S,_=w.scale[0]===-1,k=w.scale[1]===-1,{width:R,height:M}=mn(w);if(i!==void 0){if(a==="x"){let H=i*(S.naturalWidth/R);_?I={...S,x:ot(S.naturalWidth-H-S.width,0,S.naturalWidth-S.width)}:I={...S,x:ot(i*(S.naturalWidth/R),0,S.naturalWidth-S.width)}}a==="y"&&(I={...S,y:ot(i*(S.naturalHeight/M),0,S.naturalHeight-S.height)}),P(w,{crop:I});return}let N=(a==="x"?o:0)*(_?-1:1),G=(a==="y"?o:0)*(k?-1:1);I={...S,x:ot(S.x+N,0,S.naturalWidth-S.width),y:ot(S.y+G,0,S.naturalHeight-S.height)},P(w,{crop:I});return}if(i!==void 0){Ln(a==="x"?i:h,a==="y"?i:f,d,c,m,l,r);return}let b=a==="x"?e:0,x=a==="y"?e:0,T=a==="x"?Math.round(n?Oe(d.x+b,w1):h+b):h,E=a==="y"?Math.round(n?Oe(d.y+x,w1):f+x):f;Ln(T,E,d,c,m,l,r)},M_=({property:e,element:o,elementsMap:t,scene:r,appState:n})=>{let[i,a]=bt(z(o.x,o.y),z(o.x+o.width/2,o.y+o.height/2),o.angle),l=Xt(e==="x"?i:a,2);if(n.croppingElementId===o.id&&xe(o)&&o.crop){let s=Ix(o);s&&(l=Xt(e==="x"?s.x:s.y,2))}return D_(at,{label:e==="x"?"X":"Y",elements:[o],dragInputCallback:__,scene:r,value:l,property:e,appState:n})},xg=M_;import{useMemo as P_}from"react";import{jsx as z_}from"react/jsx-runtime";var R_=10,N_=(e,o,t,r,n,i,a,l)=>{for(let s=0;s<r.length;s++){let c=n[s],[m,d]=[c.x+c.width/2,c.y+c.height/2],[p,u]=bt(z(c.x,c.y),z(m,d),c.angle),h=e==="x"?Math.round(p+o):p,f=e==="y"?Math.round(u+t):u;Ln(h,f,c,i,r,l,a,!1)}},O_=(e,o,t,r,n,i,a)=>{let[l,s,,]=Se(t),c=e-l,m=o-s;for(let d=0;d<t.length;d++){let p=t[d],u=r.get(p.id);if(u&&(!Y(u)||!u.containerId)){let[h,f]=[u.x+u.width/2,u.y+u.height/2],[b,x]=bt(z(u.x,u.y),z(h,f),u.angle);Ln(b+c,x+m,p,r,n,a,i,!1)}}},F_=({accumulatedChange:e,originalElements:o,originalElementsMap:t,shouldChangeByStepSize:r,nextValue:n,property:i,scene:a,originalAppState:l})=>{let s=a.getNonDeletedElementsMap(),c=a.getNonDeletedElements();if(n!==void 0){for(let u of Xi(o,l)){let h=Ki(u,s,t);if(h.length>1){let[f,b,,]=Se(h.map(E=>E.latest));O_(i==="x"?n:f,i==="y"?n:b,h.map(E=>E.original),s,c,t,a)}else{let f=h[0]?.original,b=h[0]?.latest;if(f&&b&&Pt(b,i)){let[x,T]=[f.x+f.width/2,f.y+f.height/2],[E,w]=bt(z(f.x,f.y),z(x,T),f.angle);Ln(i==="x"?n:E,i==="y"?n:w,f,s,c,a,t,!1)}}}a.triggerUpdate();return}let m=r?Oe(e,R_):e;N_(i,i==="x"?m:0,i==="y"?m:0,o,o,s,t,a),a.triggerUpdate()},B_=({property:e,elements:o,elementsMap:t,atomicUnits:r,scene:n,appState:i})=>{let a=P_(()=>r.map(s=>{let c=Object.keys(s).map(f=>t.get(f)).filter(f=>f!==void 0);if(c.length>1){let[f,b]=Se(c);return Math.round((e==="x"?f:b)*100)/100}let[m]=c,[d,p]=[m.x+m.width/2,m.y+m.height/2],[u,h]=bt(z(m.x,m.y),z(d,p),m.angle);return Math.round((e==="x"?u:h)*100)/100}),[r,t,e]),l=new Set(a).size===1?a[0]:"Mixed";return z_(at,{label:e==="x"?"X":"Y",elements:o,dragInputCallback:F_,value:l,property:e,scene:n,appState:i})},Eg=B_;import{jsx as H_}from"react/jsx-runtime";var T1=5,U_=({property:e,scene:o,appState:t,setAppState:r})=>H_(at,{label:"Grid step",sensitivity:8,elements:[],dragInputCallback:({nextValue:n,instantChange:i,shouldChangeByStepSize:a,setInputValue:l})=>{r(s=>{let c;return n?c=n:i&&(c=a?Oe(s.gridStep+T1*Math.sign(i),T1):s.gridStep+i),c?(c=GE(c),l(c),{gridStep:c}):(l(s.gridStep),null)})},scene:o,value:t.gridStep,property:e,appState:t}),C1=U_;import W_ from"clsx";import{Fragment as vg,jsx as J,jsxs as Rt}from"react/jsx-runtime";var K_=50,ol=e=>{let o=Mo(),t=e.app.scene.getSceneNonce()||1,r=e.app.scene.getSelectedElements({selectedElementIds:o.selectedElementIds,includeBoundTextElement:!1}),n=gn(e.app);return J(X_,{...e,appState:o,sceneNonce:t,selectedElements:r,gridModeEnabled:n})},Pe=({children:e,columns:o=1,heading:t,style:r,...n})=>J("div",{className:W_("exc-stats__row",{"exc-stats__row--heading":t}),style:{gridTemplateColumns:`repeat(${o}, 1fr)`,...r},...n,children:e});Pe.displayName="StatsRow";var Sd=({children:e,order:o,style:t,...r})=>J("div",{className:"exc-stats__rows",style:{order:o,...t},...r,children:e});Sd.displayName="StatsRows";ol.StatsRow=Pe;ol.StatsRows=Sd;var X_=Y_(({app:e,onClose:o,renderCustomStats:t,selectedElements:r,appState:n,sceneNonce:i,gridModeEnabled:a})=>{let l=e.scene,s=l.getNonDeletedElements(),c=l.getNonDeletedElementsMap(),m=pe(),d=r.length===1?r[0]:null,p=r.length>1?r:null,u=n.croppingElementId&&xe(d),h=u?mn(d):null,[f,b]=G_({width:0,height:0}),x=yg(()=>V_(w=>{let S=Se(w);b({width:Math.round(S[2])-Math.round(S[0]),height:Math.round(S[3])-Math.round(S[1])})},K_),[]);I1(()=>{x(s)},[i,s,x]),I1(()=>()=>x.cancel(),[x]);let T=yg(()=>Xi(r,n),[r,n]),E=yg(()=>Fs(r),[r]);return J("div",{className:"exc-stats",children:Rt(Qe,{padding:3,children:[Rt("div",{className:"title",children:[J("h2",{children:g("stats.title")}),J("div",{className:"close",onClick:o,children:jt})]}),Rt(Ra,{label:J("h3",{children:g("stats.generalStats")}),open:!!(n.stats.panels&aa.generalStats),openTrigger:()=>m(w=>({stats:{open:!0,panels:w.stats.panels^aa.generalStats}})),children:[Rt(Sd,{children:[J(Pe,{heading:!0,children:g("stats.scene")}),Rt(Pe,{columns:2,children:[J("div",{children:g("stats.shapes")}),J("div",{children:s.length})]}),Rt(Pe,{columns:2,children:[J("div",{children:g("stats.width")}),J("div",{children:f.width})]}),Rt(Pe,{columns:2,children:[J("div",{children:g("stats.height")}),J("div",{children:f.height})]}),a&&Rt(vg,{children:[J(Pe,{heading:!0,children:"Canvas"}),J(Pe,{children:J(C1,{property:"gridStep",scene:l,appState:n,setAppState:m})})]})]}),t?.(s,n)]}),!E&&r.length>0&&J("div",{id:"elementStats",style:{marginTop:12},children:J(Ra,{label:J("h3",{children:g("stats.elementProperties")}),open:!!(n.stats.panels&aa.elementProperties),openTrigger:()=>m(w=>({stats:{open:!0,panels:w.stats.panels^aa.elementProperties}})),children:Rt(Sd,{children:[d&&Rt(vg,{children:[u&&J(Pe,{heading:!0,children:g("labels.unCroppedDimension")}),n.croppingElementId&&xe(d)&&h&&Rt(Pe,{columns:2,children:[J("div",{children:g("stats.width")}),J("div",{children:Xt(h.width,2)})]}),n.croppingElementId&&xe(d)&&h&&Rt(Pe,{columns:2,children:[J("div",{children:g("stats.height")}),J("div",{children:Xt(h.height,2)})]}),J(Pe,{heading:!0,"data-testid":"stats-element-type",children:n.croppingElementId?g("labels.imageCropping"):g(`element.${d.type}`)}),J(Pe,{children:J(xg,{element:d,property:"x",elementsMap:c,scene:l,appState:n})}),J(Pe,{children:J(xg,{element:d,property:"y",elementsMap:c,scene:l,appState:n})}),J(Pe,{children:J(fg,{property:"width",element:d,scene:l,appState:n})}),J(Pe,{children:J(fg,{property:"height",element:d,scene:l,appState:n})}),!ee(d)&&J(Pe,{children:J(h1,{property:"angle",element:d,scene:l,appState:n})}),J(Pe,{children:J(b1,{property:"fontSize",element:d,scene:l,appState:n})})]}),p&&Rt(vg,{children:[ff(p)&&J(Pe,{heading:!0,children:g("element.group")}),Rt(Pe,{columns:2,style:{margin:"0.3125rem 0"},children:[J("div",{children:g("stats.shapes")}),J("div",{children:r.length})]}),J(Pe,{children:J(Eg,{property:"x",elements:p,elementsMap:c,atomicUnits:T,scene:l,appState:n})}),J(Pe,{children:J(Eg,{property:"y",elements:p,elementsMap:c,atomicUnits:T,scene:l,appState:n})}),J(Pe,{children:J(bg,{property:"width",elements:p,elementsMap:c,atomicUnits:T,scene:l,appState:n})}),J(Pe,{children:J(bg,{property:"height",elements:p,elementsMap:c,atomicUnits:T,scene:l,appState:n})}),J(Pe,{children:J(E1,{property:"angle",elements:p,scene:l,appState:n})}),J(Pe,{children:J(v1,{property:"fontSize",elements:p,scene:l,appState:n,elementsMap:c})})]})]})})})]})})},(e,o)=>e.sceneNonce===o.sceneNonce&&e.selectedElements===o.selectedElements&&e.appState.stats.panels===o.appState.stats.panels&&e.gridModeEnabled===o.gridModeEnabled&&e.appState.gridStep===o.appState.gridStep&&e.appState.croppingElementId===o.appState.croppingElementId);import{useCallback as $_,useEffect as S1,useState as k1}from"react";import{jsx as Zi,jsxs as kd}from"react/jsx-runtime";var Z_=({sourceElementId:e,onClose:o,elementsMap:t,appState:r,generateLinkForSelection:n=Ss})=>{let i=t.get(e)?.link??null,[a,l]=k1(i),[s,c]=k1(!1);S1(()=>{let d=$(t,r),p=i;if(d.length>0&&n){let u=ks(d,r);u&&(p=uo(n(u.id,u.type)))}l(p)},[t,r,r.selectedElementIds,i,n]);let m=$_(()=>{if(a&&a!==t.get(e)?.link){let d=t.get(e);d&&P(d,{link:a})}if(!a&&s&&e){let d=t.get(e);d&&P(d,{link:null})}o?.()},[e,a,t,s,o]);return S1(()=>{let d=p=>{r.openDialog?.name==="elementLinkSelector"&&p.key===y.ENTER&&m(),r.openDialog?.name==="elementLinkSelector"&&p.key===y.ESCAPE&&o?.()};return window.addEventListener("keydown",d),()=>{window.removeEventListener("keydown",d)}},[r,o,m]),kd("div",{className:"ElementLinkDialog",children:[kd("div",{className:"ElementLinkDialog__header",children:[Zi("h2",{children:g("elementLink.title")}),Zi("p",{children:g("elementLink.desc")})]}),kd("div",{className:"ElementLinkDialog__input",children:[Zi(zi,{value:a??"",onChange:d=>{s||c(!0),l(d)},onKeyDown:d=>{d.key===y.ENTER&&m()},className:"ElementLinkDialog__input-field",selectOnRender:!0}),i&&a&&Zi(X,{type:"button",title:g("buttons.remove"),"aria-label":g("buttons.remove"),label:g("buttons.remove"),onClick:()=>{l(null),c(!0)},className:"ElementLinkDialog__remove",icon:Ot})]}),kd("div",{className:"ElementLinkDialog__actions",children:[Zi(or,{label:g("buttons.cancel"),onClick:()=>{o?.()},style:{marginRight:10}}),Zi(or,{label:g("buttons.confirm"),onClick:m,actionType:"primary"})]})]})},L1=Z_;import{Fragment as _1,jsx as Z,jsxs as Wt}from"react/jsx-runtime";var J_=({UIOptions:e})=>Wt(ft,{__fallback:!0,children:[Z(ft.DefaultItems.LoadScene,{}),Z(ft.DefaultItems.SaveToActiveFile,{}),e.canvasActions.export&&Z(ft.DefaultItems.Export,{}),e.canvasActions.saveAsImage&&Z(ft.DefaultItems.SaveAsImage,{}),Z(ft.DefaultItems.SearchMenu,{}),Z(ft.DefaultItems.Help,{}),Z(ft.DefaultItems.ClearCanvas,{}),Z(ft.Separator,{}),Z(ft.Group,{title:"Excalidraw links",children:Z(ft.DefaultItems.Socials,{})}),Z(ft.Separator,{}),Z(ft.DefaultItems.ToggleTheme,{}),Z(ft.DefaultItems.ChangeCanvasBackground,{})]}),q_=()=>Wt(pd,{__fallback:!0,children:[Z(pd.Actions.SaveToDisk,{}),Z(pd.Actions.ExportToImage,{})]}),Q_=({actionManager:e,appState:o,files:t,setAppState:r,elements:n,canvas:i,onLockToggle:a,onHandToolToggle:l,onPenModeToggle:s,showExitZenModeBtn:c,renderTopRightUI:m,renderCustomStats:d,UIOptions:p,onExportImage:u,renderWelcomeScreen:h,children:f,app:b,isCollaborating:x,generateLinkForSelection:T})=>{let E=me(),w=xw(),S=w.tunnelsJotai.Provider,[I,_]=ce(Sr),k=()=>p.canvasActions.export?Z(i0,{elements:n,appState:o,files:t,actionManager:e,exportOpts:p.canvasActions.export,canvas:i,setAppState:r}):null,R=()=>!p.canvasActions.saveAsImage||o.openDialog?.name!=="imageExport"?null:Z(Gw,{elements:n,appState:o,files:t,actionManager:e,onExportImage:u,onCloseRequest:()=>r({openDialog:null}),name:b.getName()}),M=()=>Wt("div",{style:{position:"relative"},children:[Z(w.MainMenuTunnel.Out,{}),h&&Z(w.WelcomeScreenMenuHintTunnel.Out,{})]}),N=()=>Z(Nr,{heading:"selectedShapeActions",className:rl("selected-shape-actions zen-mode-transition",{"transition-left":o.zenModeEnabled}),children:Z(Qe,{className:co.SHAPE_ACTIONS_MENU,padding:2,style:{maxHeight:`${o.height-166}px`},children:Z(Gc,{appState:o,elementsMap:b.scene.getNonDeletedElementsMap(),renderAction:e.renderAction,app:b})})}),G=()=>{let O=fi(o,n),j=o.stats.open&&!o.zenModeEnabled&&!o.viewModeEnabled&&o.openDialog?.name!=="elementLinkSelector";return Z(Jc,{side:"top",children:Wt("div",{className:"App-menu App-menu_top",children:[Wt(it.Col,{gap:6,className:rl("App-menu_top__left"),children:[M(),O&&N()]}),!o.viewModeEnabled&&o.openDialog?.name!=="elementLinkSelector"&&Z(Nr,{heading:"shapes",className:"shapes-section",children:oe=>Wt("div",{style:{position:"relative"},children:[h&&Z(w.WelcomeScreenToolbarHintTunnel.Out,{}),Z(it.Col,{gap:4,align:"start",children:Wt(it.Row,{gap:1,className:rl("App-toolbar-container",{"zen-mode":o.zenModeEnabled}),children:[Wt(Qe,{padding:1,className:rl("App-toolbar",{"zen-mode":o.zenModeEnabled}),children:[Z(ed,{appState:o,isMobile:E.editor.isMobile,device:E,app:b}),oe,Wt(it.Row,{gap:1,children:[Z(od,{zenModeEnabled:o.zenModeEnabled,checked:o.penMode,onChange:()=>s(null),title:g("toolBar.penMode"),penDetected:o.penDetected}),Z(td,{checked:o.activeTool.locked,onChange:a,title:g("toolBar.lock")}),Z("div",{className:"App-toolbar__divider"}),Z(rd,{checked:Xo(o),onChange:()=>l(),title:g("toolBar.hand"),isMobile:!0}),Z(Yc,{appState:o,activeTool:o.activeTool,UIOptions:p,app:b})]})]}),x&&Z(Qe,{style:{marginLeft:8,alignSelf:"center",height:"fit-content"},children:Z(X0,{title:g("toolBar.laser"),checked:o.activeTool.type===kt.laser,onChange:()=>b.setActiveTool({type:kt.laser}),isMobile:!0})})]})})]})}),Wt("div",{className:rl("layer-ui__wrapper__top-right zen-mode-transition",{"transition-right":o.zenModeEnabled}),children:[o.collaborators.size>0&&Z(ad,{collaborators:o.collaborators,userToFollow:o.userToFollow?.socketId||null}),m?.(E.editor.isMobile,o),!o.viewModeEnabled&&o.openDialog?.name!=="elementLinkSelector"&&(!V||o.openSidebar?.name!==pt.name)&&Z(w.DefaultSidebarTriggerTunnel.Out,{}),j&&Z(ol,{app:b,onClose:()=>{e.executeAction(Di)},renderCustomStats:d})]})]})})},H=()=>Z(ud,{__fallback:!0,onDock:O=>{le("sidebar",`toggleDock (${O?"dock":"undock"})`,`(${E.editor.isMobile?"mobile":"desktop"})`)}}),V=Ws(Ja),F=Wt(_1,{children:[f,Z(J_,{UIOptions:p}),Z(ud.Trigger,{__fallback:!0,icon:jn,title:mr(g("toolBar.library")),onToggle:O=>{O&&le("sidebar",`${pt.name} (open)`,`button (${E.editor.isMobile?"mobile":"desktop"})`)},tab:pt.defaultTab,children:g("toolBar.library")}),Z(q_,{}),o.openDialog?.name==="ttd"&&Z(gg,{__fallback:!0}),o.isLoading&&Z(Zs,{delay:250}),o.errorMessage&&Z(Fw,{onClose:()=>r({errorMessage:null}),children:o.errorMessage}),I&&!E.editor.isMobile&&Z(wy,{colorPickerType:I.colorPickerType,onCancel:()=>{_(null)},onChange:(O,j,oe,{altKey:W})=>{if(!(O!=="elementBackground"&&O!=="elementStroke"))if(oe.length){for(let ne of oe)P(ne,{[W&&I.swapPreviewOnAlt?O==="elementBackground"?"strokeColor":"backgroundColor":O==="elementBackground"?"backgroundColor":"strokeColor"]:j},!1),fr.delete(ne);bo.getScene(oe[0])?.triggerUpdate()}else r(O==="elementBackground"?{currentItemBackgroundColor:j}:{currentItemStrokeColor:j})},onSelect:(O,j)=>{_(oe=>oe?.keepOpenOnAlt&&j.altKey?oe:null),I?.onSelect?.(O,j)}}),o.openDialog?.name==="help"&&Z(o0,{onClose:()=>{r({openDialog:null})}}),Z(Tw,{}),o.openDialog?.name==="elementLinkSelector"&&Z(L1,{sourceElementId:o.openDialog.sourceElementId,onClose:()=>{r({openDialog:null})},elementsMap:b.scene.getNonDeletedElementsMap(),appState:o,generateLinkForSelection:T}),Z(w.OverwriteConfirmDialogTunnel.Out,{}),R(),k(),o.pasteDialog.shown&&Z(t0,{setAppState:r,appState:o,onClose:()=>r({pasteDialog:{shown:!1,data:null}})}),E.editor.isMobile&&Z(Qw,{app:b,appState:o,elements:n,actionManager:e,renderJSONExportDialog:k,renderImageExportDialog:R,setAppState:r,onLockToggle:a,onHandToolToggle:l,onPenModeToggle:s,renderTopRightUI:m,renderCustomStats:d,renderSidebars:H,device:E,renderWelcomeScreen:h,UIOptions:p}),!E.editor.isMobile&&Wt(_1,{children:[Wt("div",{className:"layer-ui__wrapper",style:o.openSidebar&&V&&E.editor.canFitSidebar?{width:"calc(100% - var(--right-sidebar-width))"}:{},children:[h&&Z(w.WelcomeScreenCenterTunnel.Out,{}),G(),Z(s0,{appState:o,actionManager:e,showExitZenModeBtn:c,renderWelcomeScreen:h}),o.scrolledOutside&&Z("button",{type:"button",className:"scroll-back-to-content",onClick:()=>{r(O=>({...fn(n,O)}))},children:g("buttons.scrollBackToContent")})]}),H()]})]});return Z(Ip.Provider,{value:o,children:Z(S,{children:Z(Iu.Provider,{value:w,children:F})})})},A1=e=>{let{suggestedBindings:o,startBoundElement:t,cursorButton:r,scrollX:n,scrollY:i,...a}=e;return a},e5=(e,o)=>{if(e.children!==o.children)return!1;let{canvas:t,appState:r,...n}=e,{canvas:i,appState:a,...l}=o;return rt(A1(r),A1(a),{selectedElementIds:rt,selectedGroupIds:rt})&&rt(n,l)},M1=j_.memo(Q_,e5);import{useCallback as t5,useEffect as o5,useRef as r5}from"react";import{jsx as D1,jsxs as i5}from"react/jsx-runtime";var n5=5e3,P1=({message:e,onClose:o,closable:t=!1,duration:r=n5,style:n})=>{let i=r5(0),a=r!==1/0,l=t5(()=>{a&&(i.current=window.setTimeout(()=>o(),r))},[o,r,a]);return o5(()=>{if(a)return l(),()=>clearTimeout(i.current)},[l,e,r,a]),i5("div",{className:"Toast",onMouseEnter:a?()=>clearTimeout(i?.current):void 0,onMouseLeave:a?l:void 0,style:n,children:[D1("p",{className:"Toast__message",children:e}),t&&D1(X,{icon:jt,"aria-label":"close",type:"icon",onClick:o,className:"close"})]})};var wg=D({name:"viewMode",label:"labels.viewMode",paletteName:"Toggle view mode",icon:oi,viewMode:!0,trackEvent:{category:"canvas",predicate:e=>!e.viewModeEnabled},perform(e,o){return{appState:{...o,viewModeEnabled:!this.checked(o)},captureUpdate:L.EVENTUALLY}},checked:e=>e.viewModeEnabled,predicate:(e,o,t)=>typeof t.viewModeEnabled>"u",keyTest:e=>!e[y.CTRL_OR_CMD]&&e.altKey&&e.code===te.R});import eM from"lodash.throttle";var R1=(e,o)=>{let t=o.scene.getSelectedElements(e);return t.length===1&&ie(t[0])},N1=D({name:"selectAllElementsInFrame",label:"labels.selectAllElementsInFrame",trackEvent:{category:"canvas"},perform:(e,o,t,r)=>{let n=r.scene.getSelectedElements(o).at(0)||null;if(ie(n)){let i=ko(se(e),n.id).filter(a=>!(a.type==="text"&&a.containerId));return{elements:e,appState:{...o,selectedElementIds:i.reduce((a,l)=>(a[l.id]=!0,a),{})},captureUpdate:L.IMMEDIATELY}}return{elements:e,appState:o,captureUpdate:L.EVENTUALLY}},predicate:(e,o,t,r)=>R1(o,r)}),O1=D({name:"removeAllElementsFromFrame",label:"labels.removeAllElementsFromFrame",trackEvent:{category:"history"},perform:(e,o,t,r)=>{let n=r.scene.getSelectedElements(o).at(0)||null;return ie(n)?{elements:aE(e,n),appState:{...o,selectedElementIds:{[n.id]:!0}},captureUpdate:L.IMMEDIATELY}:{elements:e,appState:o,captureUpdate:L.EVENTUALLY}},predicate:(e,o,t,r)=>R1(o,r)}),zse=D({name:"updateFrameRendering",label:"labels.updateFrameRendering",viewMode:!0,trackEvent:{category:"canvas"},perform:(e,o)=>({elements:e,appState:{...o,frameRendering:{...o.frameRendering,enabled:!o.frameRendering.enabled}},captureUpdate:L.EVENTUALLY}),checked:e=>e.frameRendering.enabled}),Use=D({name:"setFrameAsActiveTool",label:"toolBar.frame",trackEvent:{category:"toolbar"},icon:jl,viewMode:!1,perform:(e,o,t,r)=>{let n=Be(o,{type:"frame"});return go(r.interactiveCanvas,{...o,activeTool:n}),{elements:e,appState:{...o,activeTool:Be(o,{type:"frame"})},captureUpdate:L.EVENTUALLY}},keyTest:e=>!e[y.CTRL_OR_CMD]&&!e.shiftKey&&!e.altKey&&e.key.toLocaleLowerCase()===y.F}),F1=D({name:"wrapSelectionInFrame",label:"labels.wrapSelectionInFrame",trackEvent:{category:"element"},predicate:(e,o,t,r)=>{let n=$(e,o);return n.length>0&&!n.some(i=>ie(i))},perform:(e,o,t,r)=>{let n=$(e,o),[i,a,l,s]=Se(n,r.scene.getNonDeletedElementsMap()),c=16,m=ri({x:i-c,y:a-c,width:l-i+c*2,height:s-a+c*2});if(o.editingGroupId){let p=Le(n,o.editingGroupId);for(let u of p){let h=u.groupIds.indexOf(o.editingGroupId);P(u,{groupIds:u.groupIds.slice(0,h)},!1)}}return{elements:mi([...r.scene.getElementsIncludingDeleted(),m],n,m,o),appState:{selectedElementIds:{[m.id]:!0}},captureUpdate:L.IMMEDIATELY}}});import{jsx as io,jsxs as B1}from"react/jsx-runtime";var a5=()=>B1("div",{"data-testid":"brave-measure-text-error",children:[io("p",{children:io(Tt,{i18nKey:"errors.brave_measure_text_error.line1",bold:e=>io("span",{style:{fontWeight:600},children:e})})}),io("p",{children:io(Tt,{i18nKey:"errors.brave_measure_text_error.line2",bold:e=>io("span",{style:{fontWeight:600},children:e})})}),io("p",{children:io(Tt,{i18nKey:"errors.brave_measure_text_error.line3",link:e=>io("a",{href:"http://docs.excalidraw.com/docs/@excalidraw/excalidraw/faq#turning-off-aggresive-block-fingerprinting-in-brave-browser",children:e})})}),io("p",{children:io(Tt,{i18nKey:"errors.brave_measure_text_error.line4",issueLink:e=>io("a",{href:"https://github.com/excalidraw/excalidraw/issues/new",children:e}),discordLink:e=>B1("a",{href:"https://discord.gg/UexuTaE",children:[e,"."]})})})]}),z1=a5;var Ld={width:100,height:0},zr=100,l5=(e,o,t)=>{let r=So({x:0,y:0,textAlign:na.CENTER,verticalAlign:Kt.MIDDLE,...o,containerId:e.id,strokeColor:o.strokeColor||e.strokeColor});return Object.assign(e,{boundElements:(e.boundElements||[]).concat({type:"text",id:r.id})}),Ue(r,e,t),[e,r]},U1=(e,o,t,r,n)=>{let i,a;if(Object.assign(e,{startBinding:e?.startBinding||null,endBinding:e.endBinding||null}),o){let m=o?.width??zr,d=o?.height??zr,p;o.id&&(p=r.getElement(o.id),p||console.error(`No element for start binding with id ${o.id} found`));let u=o.x||e.x-m,h=o.y||e.y-d/2,f=p?p.type:o.type;if(f){if(f==="text"){let b="";p&&p.type==="text"?b=p.text:o.type==="text"&&(b=o.text),b||console.error(`No text found for start binding text element for ${e.id}`),i=So({x:u,y:h,type:"text",...p,...o,text:b}),Object.assign(i,{x:o.x||e.x-i.width,y:o.y||e.y-i.height/2})}else switch(f){case"rectangle":case"ellipse":case"diamond":{i=ho({x:u,y:h,width:m,height:d,...p,...o,type:f});break}default:Rl(e,`Unhandled element start type "${o.type}"`,!0)}Zo(e,i,"start",n)}}if(t){let m=t?.height??zr,d=t?.width??zr,p;t.id&&(p=r.getElement(t.id),p||console.error(`No element for end binding with id ${t.id} found`));let u=t.x||e.x+e.width,h=t.y||e.y-m/2,f=p?p.type:t.type;if(f){if(f==="text"){let b="";p&&p.type==="text"?b=p.text:t.type==="text"&&(b=t.text),b||console.error(`No text found for end binding text element for ${e.id}`),a=So({x:u,y:h,type:"text",...p,...t,text:b}),Object.assign(a,{y:t.y||e.y-a.height/2})}else switch(f){case"rectangle":case"ellipse":case"diamond":{a=ho({x:u,y:h,width:d,height:m,...p,...t,type:f});break}default:Rl(e,`Unhandled element end type "${f}"`,!0)}Zo(e,a,"end",n)}}if(e.points.length<2)return{linearElement:e,startBoundElement:i,endBoundElement:a};let l=e.points.length-1,s=.5,c=At(e.points);return e.points[l][0]>e.points[l-1][0]&&(c[0][0]=s,c[l][0]-=s),e.points[l][0]<e.points[l-1][0]&&(c[0][0]=-s,c[l][0]+=s),e.points[l][1]>e.points[l-1][1]&&(c[0][1]=s,c[l][1]-=s),e.points[l][1]<e.points[l-1][1]&&(c[0][1]=-s,c[l][1]+=s),Object.assign(e,{points:c}),{linearElement:e,startBoundElement:i,endBoundElement:a}},Tg=class{constructor(){C(this,"excalidrawElements",new Map);C(this,"add",o=>{o&&this.excalidrawElements.set(o.id,o)});C(this,"getElements",()=>Jo(Array.from(this.excalidrawElements.values())));C(this,"getElementsMap",()=>Vn(Q(this.getElements())));C(this,"getElement",o=>this.excalidrawElements.get(o))}},Yi=(e,o)=>{if(!e)return[];let t=At(e),r=new Tg,n=new Map,i=new Map;for(let l of t){let s,c=l.id;switch(o?.regenerateIds!==!1&&Object.assign(l,{id:gr()}),l.type){case"rectangle":case"ellipse":case"diamond":{let d=l?.label?.text&&l.width===void 0?0:l?.width||zr,p=l?.label?.text&&l.height===void 0?0:l?.height||zr;s=ho({...l,width:d,height:p});break}case"line":{let d=l.width||Ld.width,p=l.height||Ld.height;s=ns({width:d,height:p,points:[z(0,0),z(d,p)],...l});break}case"arrow":{let d=l.width||Ld.width,p=l.height||Ld.height;s=ni({width:d,height:p,endArrowhead:"arrow",points:[z(0,0),z(d,p)],...l,type:"arrow"}),Object.assign(s,Sx(s.points));break}case"text":{let d=l?.fontFamily||On,p=l?.fontSize||Nn,u=l?.lineHeight||$o(d),h=l.text??"",f=tn(h),b=Nt(f,lt({fontFamily:d,fontSize:p}),u);s=So({width:b.width,height:b.height,fontFamily:d,fontSize:p,...l});break}case"image":{s=is({width:l?.width||zr,height:l?.height||zr,...l});break}case"frame":{s=ri({x:0,y:0,...l});break}case"magicframe":{s=ba({x:0,y:0,...l});break}case"freedraw":case"iframe":case"embeddable":{s=l;break}default:s=l,Rl(l,`Unhandled element type "${l.type}"`,!0)}r.getElement(s.id)?console.error(`Duplicate id found for ${s.id}`):(r.add(s),n.set(s.id,l),c&&i.set(c,s.id))}let a=r.getElementsMap();for(let[l,s]of n){let c=r.getElement(l);switch(s.type){case"rectangle":case"ellipse":case"diamond":case"arrow":{if(s.label?.text){let[m,d]=l5(c,s?.label,a);if(r.add(m),r.add(d),Ne(m)){let p=s.type==="arrow"?s?.start:void 0,u=s.type==="arrow"?s?.end:void 0;if(p&&p.id){let x=i.get(p.id);x&&Object.assign(p,{id:x})}if(u&&u.id){let x=i.get(u.id);x&&Object.assign(u,{id:x})}let{linearElement:h,startBoundElement:f,endBoundElement:b}=U1(m,p,u,r,a);m=h,r.add(h),r.add(f),r.add(b)}}else switch(s.type){case"arrow":{let{start:m,end:d}=s;if(m&&m.id){let f=i.get(m.id);Object.assign(m,{id:f})}if(d&&d.id){let f=i.get(d.id);Object.assign(d,{id:f})}let{linearElement:p,startBoundElement:u,endBoundElement:h}=U1(c,m,d,r,a);r.add(p),r.add(u),r.add(h);break}}break}}}for(let[l,s]of n){if(s.type!=="frame"&&s.type!=="magicframe")continue;let c=r.getElement(l);if(!c)throw new Error(`Excalidraw element with id ${l} doesn't exist`);let m=[];s.children.forEach(w=>{let S=i.get(w);if(!S)throw new Error(`Element with ${w} wasn't mapped correctly`);let I=r.getElement(S);if(!I)throw new Error(`Frame element with id ${S} doesn't exist`);Object.assign(I,{frameId:c.id}),I?.boundElements?.forEach(_=>{let k=r.getElement(_.id);if(!k)throw new Error(`Bound element with id ${_.id} doesn't exist`);Object.assign(k,{frameId:c.id}),m.push(k)}),m.push(I)});let[d,p,u,h]=Se(m),f=10;d=d-f,p=p-f,u=u+f,h=h+f;let b=c?.x||d,x=c?.y||p,T=c?.width||u-d,E=c?.height||h-p;Object.assign(c,{x:b,y:x,width:T,height:E}),Dl()&&s.children.length&&(c?.x||c?.y||c?.width||c?.height)&&console.info("User provided frame attributes are being considered, if you find this inaccurate, please remove any of the attributes - x, y, width and height so frame coordinates and dimensions are calculated automatically")}return r.getElements()};import I5,{useEffect as S5,useRef as k5}from"react";import{unstable_batchedUpdates as H1}from"react-dom";import{version as s5}from"react";var Fe=e=>o=>{H1(e,o)},Ad=e=>Un(o=>{H1(e,o)}),ji=(()=>{let e;try{let t=s5.split(".");e=Number(t[0])>17}catch{e=!1}let o=!1;return()=>window.EXCALIDRAW_THROTTLE_RENDER===!0?e?!0:(o||(o=!0,console.warn("Excalidraw: render throttling is disabled on React versions < 18.")),!1):!1})();var c5="#ff6b6b",d5="#ff0000",G1=1,Y1=2,V1=(e,o)=>{if(!o.snapLines.length)return;let t=o.theme===re.LIGHT||o.zenModeEnabled?c5:d5,r=(o.zenModeEnabled?G1*1.5:G1)/o.zoom.value;e.save(),e.translate(o.scrollX,o.scrollY);for(let n of o.snapLines)n.type==="pointer"?(e.lineWidth=r,e.strokeStyle=t,p5(n,e,o)):n.type==="gap"?(e.lineWidth=r,e.strokeStyle=t,u5(n.points[0],n.points[1],n.direction,o,e)):n.type==="points"&&(e.lineWidth=r,e.strokeStyle=t,m5(n,e,o));e.restore()},m5=(e,o,t)=>{if(!t.zenModeEnabled){let r=e.points[0],n=e.points[e.points.length-1];ao(r,n,o)}for(let r of e.points)W1(r,t,o)},p5=(e,o,t)=>{W1(e.points[0],t,o),t.zenModeEnabled||ao(e.points[0],e.points[1],o)},W1=([e,o],t,r)=>{r.save();let n=(t.zenModeEnabled?Y1*1.5:Y1)/t.zoom.value;r.beginPath(),r.moveTo(e-n,o-n),r.lineTo(e+n,o+n),r.moveTo(e+n,o-n),r.lineTo(e-n,o+n),r.stroke(),r.restore()},ao=(e,o,t)=>{t.beginPath(),t.lineTo(e[0],e[1]),t.lineTo(o[0],o[1]),t.stroke()},u5=(e,o,t,r,n)=>{let i=8/r.zoom.value,a=i/2,l=i/4;if(t==="horizontal"){let s=[(e[0]+o[0])/2,e[1]];r.zenModeEnabled||ao(z(e[0],e[1]-i),z(e[0],e[1]+i),n),ao(z(s[0]-l,s[1]-a),z(s[0]-l,s[1]+a),n),ao(z(s[0]+l,s[1]-a),z(s[0]+l,s[1]+a),n),r.zenModeEnabled||(ao(z(o[0],o[1]-i),z(o[0],o[1]+i),n),ao(e,o,n))}else{let s=[e[0],(e[1]+o[1])/2];r.zenModeEnabled||ao(z(e[0]-i,e[1]),z(e[0]+i,e[1]),n),ao(z(s[0]-a,s[1]-l),z(s[0]+a,s[1]-l),n),ao(z(s[0]-a,s[1]+l),z(s[0]+a,s[1]+l),n),r.zenModeEnabled||(ao(z(o[0]-i,o[1]),z(o[0]+i,o[1]),n),ao(e,o,n))}};import _d from"open-color";var g5=(e,o)=>{Io(o.selectedLinearElement,"selectedLinearElement is null");let{segmentMidPointHoveredCoords:t}=o.selectedLinearElement;Io(t,"midPointCoords is null"),e.save(),e.translate(o.scrollX,o.scrollY),X1(t,e,o),e.restore()},h5=(e,o,t)=>{let{elementId:r,hoverPointIndex:n}=o.selectedLinearElement;if(o.editingLinearElement?.selectedPointsIndices?.includes(n))return;let i=K.getElement(r,t);if(!i)return;let a=K.getPointAtIndexGlobalCoordinates(i,n,t);e.save(),e.translate(o.scrollX,o.scrollY),X1(a,e,o),e.restore()},X1=(e,o,t)=>{o.fillStyle="rgba(105, 101, 219, 0.4)",Ta(o,e[0],e[1],K.POINT_HANDLE_SIZE/t.zoom.value,!1)},nl=(e,o,t,r,n,i,a,l,s=!1,c=0)=>{e.save(),e.translate(i,a),e.rotate(l),s&&e.fillRect(o-i,t-a,r,n),c&&e.roundRect?(e.beginPath(),e.roundRect(o-i,t-a,r,n,c),e.stroke(),e.closePath()):e.strokeRect(o-i,t-a,r,n),e.restore()},f5=(e,o,t,r,n,i)=>{e.save(),e.translate(r,n),e.rotate(i),e.beginPath(),e.moveTo(0,t/2),e.lineTo(o/2,0),e.lineTo(0,-t/2),e.lineTo(-o/2,0),e.closePath(),e.stroke(),e.restore()},Cg=(e,o,t,r,n,i=!1)=>{e.strokeStyle="#5e5ad8",e.setLineDash([]),e.fillStyle="rgba(255, 255, 255, 0.9)",n?e.fillStyle="rgba(134, 131, 226, 0.9)":i&&(e.fillStyle="rgba(177, 151, 252, 0.7)"),Ta(e,t[0],t[1],r/o.zoom.value,!i)},b5=(e,o,t,r,n,i)=>{e.beginPath(),e.ellipse(r,n,o/2,t/2,i,0,Math.PI*2),e.stroke()},x5=(e,o,t,r)=>{let[n,i,a,l]=yt(o,t),s=a-n,c=l-i;e.strokeStyle="rgba(0,0,0,.05)";let m=r.value<1?r.value:1;e.lineWidth=xx/m;let d=e.lineWidth/2+Ex,p=ps(Math.min(o.width,o.height),o);switch(o.type){case"rectangle":case"text":case"image":case"iframe":case"embeddable":case"frame":case"magicframe":nl(e,n-d,i-d,s+d*2,c+d*2,n+s/2,i+c/2,o.angle,void 0,p);break;case"diamond":let u=Math.hypot(s,c),h=d*u/c,f=d*u/s;f5(e,s+h*2,c+f*2,n+s/2,i+c/2,o.angle);break;case"ellipse":b5(e,s+d*2,c+d*2,n+s/2,i+c/2,o.angle);break}},E5=(e,o,t,r)=>{let[n,i,a]=o,l=vx(a,a.width,a.height,r);e.strokeStyle="rgba(0,0,0,0)",e.fillStyle="rgba(0,0,0,.05)",(i==="both"?[0,-1]:i==="start"?[0]:[-1]).forEach(c=>{let[m,d]=K.getPointAtIndexGlobalCoordinates(n,c,t);Ta(e,m,d,l)})},$1=(e,o,t)=>{let{angle:r,x1:n,y1:i,x2:a,y2:l,selectionColors:s,cx:c,cy:m,dashed:d,activeEmbeddable:p}=t,u=a-n,h=l-i,b=(t.padding??vl*2)/o.zoom.value,x=8/o.zoom.value,T=4/o.zoom.value;e.save(),e.translate(o.scrollX,o.scrollY),e.lineWidth=(p?4:1)/o.zoom.value;let E=s.length;for(let w=0;w<E;++w)e.strokeStyle=s[w],d&&e.setLineDash([x,T+(x+T)*(E-1)]),e.lineDashOffset=(x+T)*w,nl(e,n-b,i-b,u+b*2,h+b*2,c,m,r);e.restore()},y5=(e,o,t,r)=>{let n=Array.isArray(t)?E5:x5;e.save(),e.translate(o.scrollX,o.scrollY),n(e,t,r,o.zoom),e.restore()},v5=(e,o,t,r)=>{let[n,i,a,l]=yt(t,r),s=a-n,c=l-i;e.strokeStyle="rgb(0,118,255)",e.lineWidth=mo.strokeWidth/o.zoom.value,e.save(),e.translate(o.scrollX,o.scrollY),nl(e,n,i,s,c,n+s/2,i+c/2,t.angle,!1,mo.radius/o.zoom.value),e.restore()},w5=(e,o,t)=>{let r=t.filter(l=>l.groupIds.length===0),n=t.filter(l=>l.groupIds.length>0),i=l=>{let[s,c,m,d]=Se(l);return{angle:0,x1:s,x2:m,y1:c,y2:d,selectionColors:["rgb(0,118,255)"],dashed:!1,cx:s+(m-s)/2,cy:c+(d-c)/2,activeEmbeddable:!1}},a=l=>{let s=Le(t,l);return i(s)};Object.entries(mf(n,o)).filter(([l,s])=>s).map(([l,s])=>l).map(l=>a(l)).concat(r.map(l=>i([l]))).forEach(l=>$1(e,o,l))},Ig=(e,o,t,r)=>{if(!o.selectedLinearElement)return;e.save(),e.translate(o.scrollX,o.scrollY),e.lineWidth=1/o.zoom.value;let n=K.getPointsGlobalCoordinates(t,r),{POINT_HANDLE_SIZE:i}=K,a=o.editingLinearElement?i:i/2;if(n.forEach((l,s)=>{if(ee(t)&&s!==0&&s!==n.length-1)return;let c=!!o.editingLinearElement?.selectedPointsIndices?.includes(s);Cg(e,o,l,a,c)}),ee(t)){let l=t.fixedSegments?.map(s=>s.index)||[];n.slice(0,-1).forEach((s,c)=>{K.isSegmentTooShort(t,n[c+1],n[c],c,o.zoom)||Cg(e,o,z((s[0]+n[c+1][0])/2,(s[1]+n[c+1][1])/2),i/2,!1,!l.includes(c+1))})}else K.getEditorMidPoints(t,r,o).filter((s,c,m)=>s!==null&&!(ee(t)&&(c===0||c===m.length-1))).forEach(s=>{(o.editingLinearElement||n.length===2)&&Cg(e,o,s,i/2,!1,!0)});e.restore()},K1=(e,o,t,r,n)=>{Object.keys(r).forEach(i=>{let a=r[i];if(a!==void 0){let[l,s,c,m]=a;e.save(),e.lineWidth=1/t.zoom.value,o.selectionColor&&(e.strokeStyle=o.selectionColor),i==="rotation"?Ta(e,l+c/2,s+m/2,c/2):e.roundRect?(e.beginPath(),e.roundRect(l,s,c,m,2/t.zoom.value),e.fill(),e.stroke()):nl(e,l,s,c,m,l+c/2,s+m/2,n,!0),e.restore()}})},T5=(e,o,t,r,n)=>{let[i,a,,,l,s]=yt(r,n),c=3,m=20,d=c/t.zoom.value,p=d/2,u=l-i+d,h=s-a+d,f=Math.min(m/t.zoom.value,u),b=Math.min(m/t.zoom.value,h);e.save(),e.fillStyle=o.selectionColor,e.strokeStyle=o.selectionColor,e.lineWidth=d,[[[-u,-h],[0,p],[f,p],[p,0],[p,b]],[[u-p,-h],[p,p],[-f+p,p],[0,0],[0,b]],[[-u,h],[0,-p],[f,-p],[p,0],[p,-b]],[[u-p,h],[p,-p],[-f+p,-p],[0,0],[0,-b]]].forEach(T=>{let[[E,w],[S,I],[_,k],[R,M],[N,G]]=T;e.save(),e.translate(l,s),e.rotate(r.angle),e.beginPath(),e.moveTo(E+S,w+I),e.lineTo(E+_,w+k),e.stroke(),e.beginPath(),e.moveTo(E+R,w+M),e.lineTo(E+N,w+G),e.stroke(),e.restore()}),e.restore()},C5=(e,o,t,r)=>{o.save();let n=vl*2/t.zoom.value,i=e.width+n*2,a=e.height+n*2,l=e.x+i/2,s=e.y+a/2,c=-(i/2+n),m=-(a/2+n);o.translate(l+t.scrollX,s+t.scrollY),o.rotate(e.angle),o.lineWidth=1/t.zoom.value,o.strokeStyle=r,o.strokeRect(c,m,i,a),o.restore()},Z1=({canvas:e,elementsMap:o,visibleElements:t,selectedElements:r,allElementsMap:n,scale:i,appState:a,renderConfig:l,device:s})=>{if(e===null)return{atLeastOneVisibleElement:!1,elementsMap:o};let[c,m]=Cs(e,i),d=Is({canvas:e,scale:i,normalizedWidth:c,normalizedHeight:m});d.save(),d.scale(a.zoom.value,a.zoom.value);let p;if(t.forEach(f=>{a.editingLinearElement?.elementId===f.id&&f&&(p=f)}),p&&Ig(d,a,p,o),a.selectionElement&&!a.isCropping)try{cE(a.selectionElement,d,a,l.selectionColor)}catch(f){console.error(f)}if(a.editingTextElement&&Y(a.editingTextElement)){let f=n.get(a.editingTextElement.id);f&&!f.autoResize&&C5(f,d,a,l.selectionColor)}a.isBindingEnabled&&a.suggestedBindings.filter(f=>f!=null).forEach(f=>{y5(d,a,f,o)}),a.frameToHighlight&&v5(d,a,a.frameToHighlight,o),a.elementsToHighlight&&w5(d,a,a.elementsToHighlight);let u=r.some(f=>ie(f));if(r.length===1&&a.editingLinearElement?.elementId===r[0].id&&Ig(d,a,r[0],o),ee(r[0])&&a.selectedLinearElement&&a.selectedLinearElement.segmentMidPointHoveredCoords?g5(d,a):a.selectedLinearElement&&a.selectedLinearElement.hoverPointIndex>=0&&!(ee(r[0])&&a.selectedLinearElement.hoverPointIndex>0&&a.selectedLinearElement.hoverPointIndex<r[0].points.length-1)&&h5(d,a,o),!a.multiElement&&!a.editingLinearElement){let f=Gs(r,a),b=r.length===1&&he(r[0]);b&&a.selectedLinearElement?.elementId===r[0].id&&!r[0].locked&&Ig(d,a,r[0],o);let x=l.selectionColor||_d.black;if(f){let T=Q(r),E=[];for(let S of o.values()){let I=[],_=l.remoteSelectedElementIds.get(S.id);if(b&&ee(S)&&(S.startBinding||S.endBinding)||(T.has(S.id)&&!Fl(a,S)&&I.push(x),_&&I.push(..._.map(k=>Tn(k,a.collaborators.get(k))))),I.length){let[k,R,M,N,G,H]=yt(S,o,!0);E.push({angle:S.angle,x1:k,y1:R,x2:M,y2:N,selectionColors:I,dashed:!!_,cx:G,cy:H,activeEmbeddable:a.activeEmbeddable?.element===S&&a.activeEmbeddable.state==="active",padding:S.id===a.croppingElementId||xe(S)?0:void 0})}}let w=S=>{let I=Le(o,S),[_,k,R,M]=Se(I);E.push({angle:0,x1:_,x2:R,y1:k,y2:M,selectionColors:[_d.black],dashed:!0,cx:_+(R-_)/2,cy:k+(M-k)/2,activeEmbeddable:!1})};for(let S of po(a))w(S);a.editingGroupId&&w(a.editingGroupId),E.forEach(S=>$1(d,a,S))}if(d.save(),d.translate(a.scrollX,a.scrollY),r.length===1){d.fillStyle=_d.white;let T=ME(r[0],a.zoom,o,"mouse",Hs(s));if(!a.viewModeEnabled&&f&&!Y(a.editingTextElement)&&!a.croppingElementId&&K1(d,l,a,T,r[0].angle),a.croppingElementId&&!a.isCropping){let E=o.get(a.croppingElementId);E&&xe(E)&&T5(d,l,a,E,o)}}else if(r.length>1&&!a.isRotating){let T=vl*2/a.zoom.value;d.fillStyle=_d.white;let[E,w,S,I]=Se(r),_=d.getLineDash();d.setLineDash([2/a.zoom.value]);let k=d.lineWidth;d.lineWidth=1/a.zoom.value,d.strokeStyle=x,nl(d,E-T,w-T,S-E+T*2,I-w+T*2,(E+S)/2,(w+I)/2,0),d.lineWidth=k,d.setLineDash(_);let R=_E([E,w,S,I,(E+S)/2,(w+I)/2],0,a.zoom,"mouse",u?{...Hs(s),rotation:!0}:Hs(s));r.some(M=>!M.locked)&&K1(d,l,a,R,0)}d.restore()}a.searchMatches.forEach(({id:f,focus:b,matchedLines:x})=>{let T=o.get(f);if(T&&Y(T)){let[E,w,,,S,I]=yt(T,o,!0);d.save(),a.theme===re.LIGHT?b?d.fillStyle="rgba(255, 124, 0, 0.4)":d.fillStyle="rgba(255, 226, 0, 0.4)":b?d.fillStyle="rgba(229, 82, 0, 0.4)":d.fillStyle="rgba(99, 52, 0, 0.4)",d.translate(a.scrollX,a.scrollY),d.translate(S,I),d.rotate(T.angle),x.forEach(_=>{d.fillRect(E+_.offsetX-S,w+_.offsetY-I,_.width,_.height)}),d.restore()}}),V1(d,a),d.restore(),sv({context:d,renderConfig:l,appState:a,normalizedWidth:c,normalizedHeight:m});let h;return l.renderScrollbars&&(h=Jw(t,c,m,a),d.save(),d.fillStyle=jw,d.strokeStyle="rgba(255,255,255,0.8)",[h.horizontal,h.vertical].forEach(f=>{f&&xc(d,f.x,f.y,f.width,f.height,Oo/2)}),d.restore()),{scrollBars:h,atLeastOneVisibleElement:t.length>0,elementsMap:o}},Sg=Un(e=>{let o=Z1(e);e.callback?.(o)},{trailing:!0}),j1=(e,o)=>{if(o){Sg(e);return}let t=Z1(e);return e.callback(t),t};import{jsx as _5}from"react/jsx-runtime";var L5=e=>{let o=k5(!1);return S5(()=>{if(!o.current){o.current=!0;return}let t=new Map,r=new Map,n=new Map,i=new Map,a=new Map;e.appState.collaborators.forEach((s,c)=>{if(s.selectedElementIds)for(let m of Object.keys(s.selectedElementIds))n.has(m)||n.set(m,[]),n.get(m).push(c);!s.pointer||s.pointer.renderCursor===!1||(s.username&&i.set(c,s.username),s.userState&&a.set(c,s.userState),r.set(c,xt({sceneX:s.pointer.x,sceneY:s.pointer.y},e.appState)),t.set(c,s.button))});let l=e.containerRef?.current&&getComputedStyle(e.containerRef.current).getPropertyValue("--color-selection")||"#6965db";j1({canvas:e.canvas,elementsMap:e.elementsMap,visibleElements:e.visibleElements,selectedElements:e.selectedElements,allElementsMap:e.allElementsMap,scale:window.devicePixelRatio,appState:e.appState,renderConfig:{remotePointerViewportCoords:r,remotePointerButton:t,remoteSelectedElementIds:n,remotePointerUsernames:i,remotePointerUserStates:a,selectionColor:l,renderScrollbars:!1},device:e.device,callback:e.renderInteractiveSceneCallback},ji())}),_5("canvas",{className:"excalidraw__canvas interactive",style:{width:e.appState.width,height:e.appState.height,cursor:e.appState.viewModeEnabled?we.GRAB:we.AUTO},width:e.appState.width*e.scale,height:e.appState.height*e.scale,ref:e.handleCanvasRef,onContextMenu:e.onContextMenu,onPointerMove:e.onPointerMove,onPointerUp:e.onPointerUp,onPointerCancel:e.onPointerCancel,onTouchMove:e.onTouchMove,onPointerDown:e.onPointerDown,onDoubleClick:e.appState.viewModeEnabled?void 0:e.onDoubleClick,children:g("labels.drawingCanvas")})},J1=e=>({zoom:e.zoom,scrollX:e.scrollX,scrollY:e.scrollY,width:e.width,height:e.height,viewModeEnabled:e.viewModeEnabled,openDialog:e.openDialog,editingGroupId:e.editingGroupId,editingLinearElement:e.editingLinearElement,selectedElementIds:e.selectedElementIds,frameToHighlight:e.frameToHighlight,offsetLeft:e.offsetLeft,offsetTop:e.offsetTop,theme:e.theme,pendingImageElementId:e.pendingImageElementId,selectionElement:e.selectionElement,selectedGroupIds:e.selectedGroupIds,selectedLinearElement:e.selectedLinearElement,multiElement:e.multiElement,isBindingEnabled:e.isBindingEnabled,suggestedBindings:e.suggestedBindings,isRotating:e.isRotating,elementsToHighlight:e.elementsToHighlight,collaborators:e.collaborators,activeEmbeddable:e.activeEmbeddable,snapLines:e.snapLines,zenModeEnabled:e.zenModeEnabled,editingTextElement:e.editingTextElement,isCropping:e.isCropping,croppingElementId:e.croppingElementId,searchMatches:e.searchMatches}),A5=(e,o)=>e.selectionNonce!==o.selectionNonce||e.sceneNonce!==o.sceneNonce||e.scale!==o.scale||e.elementsMap!==o.elementsMap||e.visibleElements!==o.visibleElements||e.selectedElements!==o.selectedElements?!1:rt(J1(e.appState),J1(o.appState)),kg=I5.memo(L5,A5);import M5,{useEffect as D5,useRef as q1}from"react";import{jsx as N5}from"react/jsx-runtime";var P5=e=>{let o=q1(null),t=q1(!1);return D5(()=>{let r=o.current;if(!r)return;let n=e.canvas;t.current||(t.current=!0,r.replaceChildren(n),n.classList.add("excalidraw__canvas","static"));let i=`${e.appState.width}px`,a=`${e.appState.height}px`;n.style.width!==i&&(n.style.width=i),n.style.height!==a&&(n.style.height=a);let l=e.appState.width*e.scale,s=e.appState.height*e.scale;n.width!==l&&(n.width=l),n.height!==s&&(n.height=s),Kx({canvas:n,rc:e.rc,scale:e.scale,elementsMap:e.elementsMap,allElementsMap:e.allElementsMap,visibleElements:e.visibleElements,appState:e.appState,renderConfig:e.renderConfig},ji())}),N5("div",{className:"excalidraw__canvas-wrapper",ref:o})},Q1=e=>({zoom:e.zoom,scrollX:e.scrollX,scrollY:e.scrollY,width:e.width,height:e.height,viewModeEnabled:e.viewModeEnabled,openDialog:e.openDialog,hoveredElementIds:e.hoveredElementIds,offsetLeft:e.offsetLeft,offsetTop:e.offsetTop,theme:e.theme,pendingImageElementId:e.pendingImageElementId,shouldCacheIgnoreZoom:e.shouldCacheIgnoreZoom,viewBackgroundColor:e.viewBackgroundColor,exportScale:e.exportScale,selectedElementsAreBeingDragged:e.selectedElementsAreBeingDragged,gridSize:e.gridSize,gridStep:e.gridStep,frameRendering:e.frameRendering,selectedElementIds:e.selectedElementIds,frameToHighlight:e.frameToHighlight,editingGroupId:e.editingGroupId,currentHoveredFontFamily:e.currentHoveredFontFamily,croppingElementId:e.croppingElementId}),R5=(e,o)=>e.sceneNonce!==o.sceneNonce||e.scale!==o.scale||e.elementsMap!==o.elementsMap||e.visibleElements!==o.visibleElements?!1:rt(Q1(e.appState),Q1(o.appState))&&rt(e.renderConfig,o.renderConfig),Lg=M5.memo(P5,R5);var il=class{constructor(o){C(this,"scene");C(this,"getRenderableElements",(()=>{let o=({elementsMap:r,zoom:n,offsetLeft:i,offsetTop:a,scrollX:l,scrollY:s,height:c,width:m})=>{let d=[];for(let p of r.values())ka(p,m,c,{zoom:n,offsetLeft:i,offsetTop:a,scrollX:l,scrollY:s},r)&&d.push(p);return d},t=({elements:r,editingTextElement:n,newElementId:i,pendingImageElementId:a})=>{let l=Vn(new Map);for(let s of r)xe(s)&&a===s.id||i!==s.id&&(!n||n.type!=="text"||s.id!==n.id)&&l.set(s.id,s);return l};return Wh(({zoom:r,offsetLeft:n,offsetTop:i,scrollX:a,scrollY:l,height:s,width:c,editingTextElement:m,newElementId:d,pendingImageElementId:p,sceneNonce:u})=>{let h=this.scene.getNonDeletedElements(),f=t({elements:h,editingTextElement:m,newElementId:d,pendingImageElementId:p}),b=o({elementsMap:f,zoom:r,offsetLeft:n,offsetTop:i,scrollX:a,scrollY:l,height:s,width:c});return{elementsMap:f,visibleElements:b}})})());this.scene=o}destroy(){Sg.cancel(),Wx.cancel(),this.getRenderableElements.clear()}};import{useEffect as O5,useRef as F5}from"react";import{jsx as eT}from"react/jsx-runtime";var tT=({trails:e})=>{let o=F5(null);return O5(()=>{if(o.current)for(let t of e)t.start(o.current);return()=>{for(let t of e)t.stop()}},e),eT("div",{className:"SVGLayer",children:eT("svg",{ref:o})})};import{jsx as U5}from"react/jsx-runtime";var B5=5,z5=(e,o,t)=>{let[r,n]=yt(e,t),{x:i,y:a}=xt({sceneX:r+e.width,sceneY:n},o),l=i-o.offsetLeft+10,s=a-o.offsetTop;return{x:l,y:s}},Ag=({children:e,element:o,elementsMap:t})=>{let r=Mo();if(r.contextMenu||r.newElement||r.resizingElement||r.isRotating||r.openMenu||r.viewModeEnabled)return null;let{x:n,y:i}=z5(o,r,t);return U5("div",{className:"excalidraw-canvas-buttons",style:{top:`${i}px`,left:`${n}px`,padding:B5},children:e})};import H5 from"clsx";import{jsx as oT,jsxs as Y5}from"react/jsx-runtime";var G5="small",Md=e=>Y5("label",{className:H5("ToolIcon ToolIcon__MagicButton",`ToolIcon_size_${G5}`,{"is-mobile":e.isMobile}),title:`${e.title}`,children:[oT("input",{className:"ToolIcon_type_checkbox",type:"checkbox",name:e.name,onChange:e.onChange,checked:e.checked,"aria-label":e.title}),oT("div",{className:"ToolIcon__icon",children:e.icon})]});import{jsx as _g,jsxs as rT}from"react/jsx-runtime";var V5=({height:e,width:o,userToFollow:t,onDisconnect:r})=>_g("div",{className:"follow-mode",style:{width:o,height:e},children:rT("div",{className:"follow-mode__badge",children:[rT("div",{className:"follow-mode__badge__label",children:["Following"," ",_g("span",{className:"follow-mode__badge__username",title:t.username,children:t.username})]}),_g("button",{type:"button",onClick:r,className:"follow-mode__disconnect-btn",children:jt})]})}),nT=V5;var Dd=class{constructor(){C(this,"targets",new WeakMap);C(this,"rafIds",new WeakMap)}register(o,t){this.targets.set(o,{callback:t,stopped:!0})}start(o){let t=this.targets.get(o);t&&(this.rafIds.has(o)||(this.targets.set(o,{...t,stopped:!1}),this.scheduleFrame(o)))}stop(o){let t=this.targets.get(o);t&&!t.stopped&&this.targets.set(o,{...t,stopped:!0}),this.cancelFrame(o)}constructFrame(o){return t=>{let r=this.targets.get(o);if(!r)return;let n=this.onFrame(r,t);!r.stopped&&!n?this.scheduleFrame(o):this.cancelFrame(o)}}scheduleFrame(o){let t=requestAnimationFrame(this.constructFrame(o));this.rafIds.set(o,t)}cancelFrame(o){if(this.rafIds.has(o)){let t=this.rafIds.get(o);cancelAnimationFrame(t)}this.rafIds.delete(o)}onFrame(o,t){return o.callback(t)??!1}};import{LaserPointer as W5}from"@excalidraw/laser-pointer";var An=class{constructor(o,t,r){this.animationFrameHandler=o;this.app=t;this.options=r;C(this,"currentTrail");C(this,"pastTrails",[]);C(this,"container");C(this,"trailElement");this.animationFrameHandler.register(this,this.onFrame.bind(this)),this.trailElement=document.createElementNS(Ah,"path")}get hasCurrentTrail(){return!!this.currentTrail}hasLastPoint(o,t){if(this.currentTrail){let r=this.currentTrail.originalPoints.length;return this.currentTrail.originalPoints[r-1][0]===o&&this.currentTrail.originalPoints[r-1][1]===t}return!1}start(o){o&&(this.container=o),this.trailElement.parentNode!==this.container&&this.container&&this.container.appendChild(this.trailElement),this.animationFrameHandler.start(this)}stop(){this.animationFrameHandler.stop(this),this.trailElement.parentNode===this.container&&this.container?.removeChild(this.trailElement)}startPath(o,t){this.currentTrail=new W5(this.options),this.currentTrail.addPoint([o,t,performance.now()]),this.update()}addPointToPath(o,t){this.currentTrail&&(this.currentTrail.addPoint([o,t,performance.now()]),this.update())}endPath(){this.currentTrail&&(this.currentTrail.close(),this.currentTrail.options.keepHead=!1,this.pastTrails.push(this.currentTrail),this.currentTrail=void 0,this.update())}update(){this.start()}onFrame(){let o=[];for(let r of this.pastTrails)o.push(this.drawTrail(r,this.app.state));if(this.currentTrail){let r=this.drawTrail(this.currentTrail,this.app.state);o.push(r)}this.pastTrails=this.pastTrails.filter(r=>r.getStrokeOutline().length!==0),o.length===0&&this.stop();let t=o.join(" ").trim();this.trailElement.setAttribute("d",t),this.trailElement.setAttribute("fill",(this.options.fill??(()=>"black"))(this))}drawTrail(o,t){let r=o.getStrokeOutline(o.options.size/t.zoom.value).map(([n,i])=>{let a=xt({sceneX:n,sceneY:i},t);return[a.x,a.y]});return Xh(r,!0)}};var Pd=class{constructor(o,t){this.animationFrameHandler=o;this.app=t;C(this,"localTrail");C(this,"collabTrails",new Map);C(this,"container");this.animationFrameHandler.register(this,this.onFrame.bind(this)),this.localTrail=new An(o,t,{...this.getTrailOptions(),fill:()=>Yd})}getTrailOptions(){return{simplify:0,streamline:.4,sizeMapping:o=>{let n=Math.max(0,1-(performance.now()-o.pressure)/1e3),i=(50-Math.min(50,o.totalLength-o.currentIndex))/50;return Math.min(Zr(i),Zr(n))}}}startPath(o,t){this.localTrail.startPath(o,t)}addPointToPath(o,t){this.localTrail.addPointToPath(o,t)}endPath(){this.localTrail.endPath()}start(o){this.container=o,this.animationFrameHandler.start(this),this.localTrail.start(o)}stop(){this.animationFrameHandler.stop(this),this.localTrail.stop()}onFrame(){this.updateCollabTrails()}updateCollabTrails(){if(!(!this.container||this.app.state.collaborators.size===0)){for(let[o,t]of this.app.state.collaborators.entries()){let r;this.collabTrails.has(o)?r=this.collabTrails.get(o):(r=new An(this.animationFrameHandler,this.app,{...this.getTrailOptions(),fill:()=>t.pointer?.laserColor||Tn(o,t)}),r.start(this.container),this.collabTrails.set(o,r)),t.pointer&&t.pointer.tool==="laser"&&(t.button==="down"&&!r.hasCurrentTrail&&r.startPath(t.pointer.x,t.pointer.y),t.button==="down"&&r.hasCurrentTrail&&!r.hasLastPoint(t.pointer.x,t.pointer.y)&&r.addPointToPath(t.pointer.x,t.pointer.y),t.button==="up"&&r.hasCurrentTrail&&(r.addPointToPath(t.pointer.x,t.pointer.y),r.endPath()))}for(let o of this.collabTrails.keys())this.app.state.collaborators.has(o)||(this.collabTrails.get(o).stop(),this.collabTrails.delete(o))}}};var K5=(e,o,t,r,n,i)=>{let{zoom:a}=r,l=180*t/Math.PI,s=e*(a.value-1)/2,c=o*(a.value-1)/2;return e>n&&a.value!==1&&(s=n*(a.value-1)/2),o>i&&a.value!==1&&(c=i*(a.value-1)/2),`translate(${s}px, ${c}px) scale(${a.value}) rotate(${l}deg)`},iT=({id:e,onChange:o,onSubmit:t,getViewportCoords:r,element:n,canvas:i,excalidrawContainer:a,app:l,autoSelect:s=!0})=>{let c=(F,O)=>{if(!O.style.fontFamily||!O.style.fontSize)return!1;let j=O.style.fontFamily.replace(/"/g,"");return Xr({fontFamily:F.fontFamily})!==j||`${F.fontSize}px`!==O.style.fontSize},m=()=>{let F=l.state,O=bo.getScene(n)?.getElement(e);if(!O)return;let{textAlign:j,verticalAlign:oe}=O,W=l.scene.getNonDeletedElementsMap();if(O&&Y(O)){let ne=O.x,ge=O.y,be=Qt(O,l.scene.getNonDeletedElementsMap()),mt=O.width,wo=O.height,Dn=O.width,Pn=O.height;if(be&&O.containerId){if(Ne(be)){let lr=K.getBoundTextElementPosition(be,O,W);ne=lr.x,ge=lr.y}let gl=c(O,d),qi;if(gl?qi=Sa(be.id,be.height):(qi=bE[be.id],qi||(qi=Sa(be.id,be.height))),Dn=qm(be,O),Pn=SE(be,O),!Ne(be)&&wo>Pn){let lr=ui(wo,be.type);P(be,{height:lr});return}else if(!Ne(be)&&be.height>qi.height&&wo<Pn){let lr=ui(wo,be.type);P(be,{height:lr})}else{let{y:lr}=zs(be,O,W);ge=lr}}let[pl,ul]=r(ne,ge),_T=d.selectionStart,Ud=d.selectionEnd,Jg=d.value.length;if(_T===Ud&&Ud!==Jg){let gl=Jg-Ud;d.selectionStart=d.value.length-gl,d.selectionEnd=d.value.length-gl}be?mt+=.5:(Dn=(F.width-8-pl)/F.zoom.value,mt=Math.min(mt,Dn)),wo*=1.05;let MT=lt(O),qg=(F.height-ul)/F.zoom.value;Object.assign(d.style,{font:MT,lineHeight:O.lineHeight,width:`${mt}px`,height:`${wo}px`,left:`${pl}px`,top:`${ul}px`,transform:K5(mt,wo,wE(O,be),F,Dn,qg),textAlign:j,verticalAlign:oe,color:O.strokeColor,opacity:O.opacity/100,filter:"var(--theme-filter)",maxHeight:`${qg}px`}),d.scrollTop=0,sa()&&(d.style.fontFamily=Xr(O)),P(O,{x:ne,y:ge})}},d=document.createElement("textarea");d.dir="auto",d.tabIndex=0,d.dataset.type="wysiwyg",d.wrap="off",d.classList.add("excalidraw-wysiwyg");let p="pre",u="normal";(qe(n)||!n.autoResize)&&(p="pre-wrap",u="break-word"),Object.assign(d.style,{position:"absolute",display:"inline-block",minHeight:"1em",backfaceVisibility:"hidden",margin:0,padding:0,border:0,outline:0,resize:"none",background:"transparent",overflow:"hidden",zIndex:"var(--zIndex-wysiwyg)",wordBreak:u,whiteSpace:p,overflowWrap:"break-word",boxSizing:"content-box"}),d.value=n.originalText,m(),o&&(d.onpaste=async F=>{let O=await _s(F,!0);if(!O.text)return;let j=tn(O.text);if(!j)return;let oe=Qt(n,l.scene.getNonDeletedElementsMap()),W=lt({fontSize:l.state.currentItemFontSize,fontFamily:l.state.currentItemFontFamily});if(oe){let ne=ue(oe,l.scene.getNonDeletedElementsMap()),ge=Ol(`${d.value}${j}`,W,qm(oe,ne)),be=sf(ge,W);d.style.width=`${be}px`}},d.oninput=()=>{let F=tn(d.value);if(d.value!==F){let O=d.selectionStart;d.value=F,d.selectionStart=O,d.selectionEnd=O}o(d.value)}),d.onkeydown=F=>{if(!F.shiftKey&&pc.keyTest(F))F.preventDefault(),l.actionManager.executeAction(pc),m();else if(!F.shiftKey&&uc.keyTest(F))F.preventDefault(),l.actionManager.executeAction(uc),m();else if(!F.shiftKey&&gc.keyTest(F))F.preventDefault(),l.actionManager.executeAction(gc),m();else if(Up.keyTest(F))l.actionManager.executeAction(Up);else if(Hp.keyTest(F))l.actionManager.executeAction(Hp);else if(F.key===y.ESCAPE)F.preventDefault(),S=!0,I();else if(F.key===y.ENTER&&F[y.CTRL_OR_CMD]){if(F.preventDefault(),F.isComposing||F.keyCode===229)return;S=!0,I()}else if(F.key===y.TAB||F[y.CTRL_OR_CMD]&&(F.code===te.BRACKET_LEFT||F.code===te.BRACKET_RIGHT)){if(F.preventDefault(),F.isComposing)return;F.shiftKey||F.code===te.BRACKET_LEFT?T():x(),d.dispatchEvent(new Event("input"))}};let h=4,f=" ".repeat(h),b=new RegExp(`^ {1,${h}}`),x=()=>{let{selectionStart:F,selectionEnd:O}=d,j=E(),oe=d.value;j.forEach(W=>{let ne=oe.slice(0,W),ge=oe.slice(W);oe=`${ne}${f}${ge}`}),d.value=oe,d.selectionStart=F+h,d.selectionEnd=O+h*j.length},T=()=>{let{selectionStart:F,selectionEnd:O}=d,j=E(),oe=[],W=d.value;j.forEach(ne=>{let ge=W.slice(ne,ne+h).match(b);if(ge){let be=W.slice(0,ne),mt=W.slice(ne+ge[0].length);W=`${be}${mt}`,oe.push(ne)}}),d.value=W,oe.length&&(F>oe[oe.length-1]?d.selectionStart=Math.max(F-h,oe[oe.length-1]):d.selectionStart=F,d.selectionEnd=Math.max(d.selectionStart,O-h*oe.length))},E=()=>{let{selectionStart:F,selectionEnd:O,value:j}=d,oe=j.slice(0,F).match(/[^\n]*$/)[0].length;return F=F-oe,j.slice(F,O).split(`
-`).reduce((ne,ge,be,mt)=>ne.concat(be?ne[be-1]+mt[be-1].length+1:F),[]).reverse()},w=F=>{F.target instanceof HTMLCanvasElement&&(F.preventDefault(),F.stopPropagation())},S=!1,I=()=>{if(H)return;H=!0,_();let F=bo.getScene(n)?.getElement(n.id);if(!F)return;let O=Qt(F,l.scene.getNonDeletedElementsMap());if(O){if(d.value.trim()){let j=vE(O);!j||j!==n.id?P(O,{boundElements:(O.boundElements||[]).concat({type:"text",id:n.id})}):Ne(O)&&ep(O)}else P(O,{boundElements:O.boundElements?.filter(j=>!Y(j))});Ue(F,O,l.scene.getNonDeletedElementsMap())}t({viaKeyboard:S,nextOriginalText:d.value})},_=()=>{d.onblur=null,d.oninput=null,d.onkeydown=null,V&&V.disconnect(),window.removeEventListener("resize",m),window.removeEventListener("wheel",w,!0),window.removeEventListener("pointerdown",M),window.removeEventListener("pointerup",k),window.removeEventListener("blur",I),window.removeEventListener("beforeunload",I),N(),G(),d.remove()},k=F=>{window.removeEventListener("pointerup",k);let O=F?.target,j=O instanceof HTMLElement&&O.classList.contains("properties-trigger");setTimeout(()=>{d.onblur=I,j||d.focus()})},R=()=>{d.onblur=null,window.addEventListener("pointerup",k),window.addEventListener("blur",I)},M=F=>{let O=F?.target;if(F.button===To.WHEEL){O instanceof HTMLTextAreaElement&&(F.preventDefault(),l.handleCanvasPanUsingWheelOrSpaceDrag(F)),R();return}let j=O instanceof HTMLElement&&O.classList.contains("properties-trigger");(F.target instanceof HTMLElement||F.target instanceof SVGElement)&&F.target.closest(`.${co.SHAPE_ACTIONS_MENU}, .${co.ZOOM_ACTIONS}`)&&!Co(F.target)||j?R():F.target instanceof HTMLCanvasElement&&!sa()&&requestAnimationFrame(()=>{I()})},N=l.scene.onUpdate(()=>{m(),!!document.activeElement?.closest(".properties-content")||d.focus()}),G=l.onScrollChangeEmitter.on(()=>{m()}),H=!1;s&&d.select(),k();let V=null;i&&"ResizeObserver"in window?(V=new window.ResizeObserver(()=>{m()}),V.observe(i)):window.addEventListener("resize",m),d.onpointerdown=F=>F.stopPropagation(),requestAnimationFrame(()=>{window.addEventListener("pointerdown",M,{capture:!0})}),window.addEventListener("beforeunload",I),a?.querySelector(".excalidraw-textEditorContainer").appendChild(d)};var aT=D({name:"autoResize",label:"labels.autoResize",icon:null,trackEvent:{category:"element"},predicate:(e,o,t,r)=>{let n=$(e,o);return n.length===1&&Y(n[0])&&!n[0].autoResize},perform:(e,o,t,r)=>{let n=$(e,o);return{appState:o,elements:e.map(i=>{if(i.id===n[0].id&&Y(i)){let a=Nt(i.originalText,lt(i),i.lineHeight);return q(i,{autoResize:!0,width:a.width,height:a.height,text:i.originalText})}return i}),captureUpdate:L.IMMEDIATELY}}});var lT=e=>{let o=["flowchart","graph","sequenceDiagram","classDiagram","stateDiagram","stateDiagram-v2","erDiagram","journey","gantt","pie","quadrantChart","requirementDiagram","gitGraph","C4Context","mindmap","timeline","zenuml","sankey","xychart","block"];return new RegExp(`^(?:%%{.*?}%%[\\s\\n]*)?\\b(?:${o.map(r=>`\\s*${r}(-beta)?`).join("|")})\\b`).test(e.trim())};import{useEffect as $5,useRef as Z5}from"react";var sT=({canvas:e,rc:o,newElement:t,elementsMap:r,allElementsMap:n,scale:i,appState:a,renderConfig:l})=>{if(e){let[s,c]=Cs(e,i),m=Is({canvas:e,scale:i,normalizedWidth:s,normalizedHeight:c});m.save(),m.scale(a.zoom.value,a.zoom.value),t&&t.type!=="selection"?dE(t,r,n,o,m,l,a):m.clearRect(0,0,s,c)}},X5=Un(e=>{sT(e)},{trailing:!0}),cT=(e,o)=>{if(o){X5(e);return}sT(e)};import{jsx as J5}from"react/jsx-runtime";var j5=e=>{let o=Z5(null);return $5(()=>{o.current&&cT({canvas:o.current,scale:e.scale,newElement:e.appState.newElement,elementsMap:e.elementsMap,allElementsMap:e.allElementsMap,rc:e.rc,renderConfig:e.renderConfig,appState:e.appState},ji())}),J5("canvas",{className:"excalidraw__canvas",style:{width:e.appState.width,height:e.appState.height},width:e.appState.width*e.scale,height:e.appState.height*e.scale,ref:o})},dT=j5;import{Fragment as oM,jsx as Ie,jsxs as Nd}from"react/jsx-runtime";var gT=Uo.createContext(null),hT=Uo.createContext(null),fT={viewport:{isMobile:!1,isLandscape:!1},editor:{isMobile:!1,canFitSidebar:!1},isTouchScreen:!1},Og=Uo.createContext(fT);Og.displayName="DeviceContext";var Fg=Uo.createContext({container:null,id:null});Fg.displayName="ExcalidrawContainerContext";var Bg=Uo.createContext([]);Bg.displayName="ExcalidrawElementsContext";var zg=Uo.createContext({...$n(),width:0,height:0,offsetLeft:0,offsetTop:0});zg.displayName="ExcalidrawAppStateContext";var Ug=Uo.createContext(()=>{console.warn("Uninitialized ExcalidrawSetAppStateContext context!")});Ug.displayName="ExcalidrawSetAppStateContext";var Hg=Uo.createContext(null);Hg.displayName="ExcalidrawActionManagerContext";var He=()=>Hr(gT),Do=()=>Hr(hT),me=()=>Hr(Og),Ke=()=>Hr(Fg),kr=()=>Hr(Bg),Mo=()=>Hr(zg),pe=()=>Hr(Ug),Xe=()=>Hr(Hg),al=!1,Mg=0,Mn=!1,ll=!1,Dg=!1,Pg={horizontal:null,vertical:null},Ur=0,sl=!1,Rg=new Map,Rd=!1,pT=0,uT=!1,cl=null,fe={pointers:new Map,lastCenter:null,initialDistance:null,initialScale:null},Ng=class e extends Uo.Component{constructor(t){super(t);C(this,"canvas");C(this,"interactiveCanvas",null);C(this,"rc");C(this,"unmounted",!1);C(this,"actionManager");C(this,"device",fT);C(this,"excalidrawContainerRef",Uo.createRef());C(this,"scene");C(this,"fonts");C(this,"renderer");C(this,"visibleElements");C(this,"resizeObserver");C(this,"nearestScrollableContainer");C(this,"library");C(this,"libraryItemsFromStorage");C(this,"id");C(this,"store");C(this,"history");C(this,"excalidrawContainerValue");C(this,"files",{});C(this,"imageCache",new Map);C(this,"iFrameRefs",new Map);C(this,"embedsValidationStatus",new Map);C(this,"initializedEmbeds",new Set);C(this,"elementsPendingErasure",new Set);C(this,"flowChartCreator",new Qc);C(this,"flowChartNavigator",new qc);C(this,"hitLinkElement");C(this,"lastPointerDownEvent",null);C(this,"lastPointerUpEvent",null);C(this,"lastPointerMoveEvent",null);C(this,"lastPointerMoveCoords",null);C(this,"lastViewportPosition",{x:0,y:0});C(this,"animationFrameHandler",new Dd);C(this,"laserTrails",new Pd(this.animationFrameHandler,this));C(this,"eraserTrail",new An(this.animationFrameHandler,this,{streamline:.2,size:5,keepHead:!0,sizeMapping:t=>{let i=Math.max(0,1-(performance.now()-t.pressure)/200),a=(10-Math.min(10,t.totalLength-t.currentIndex))/10;return Math.min(Zr(a),Zr(i))},fill:()=>this.state.theme===re.LIGHT?"rgba(0, 0, 0, 0.2)":"rgba(255, 255, 255, 0.2)"}));C(this,"onChangeEmitter",new qt);C(this,"onPointerDownEmitter",new qt);C(this,"onPointerUpEmitter",new qt);C(this,"onUserFollowEmitter",new qt);C(this,"onScrollChangeEmitter",new qt);C(this,"missingPointerEventCleanupEmitter",new qt);C(this,"onRemoveEventListenersEmitter",new qt);C(this,"getEffectiveGridSize",()=>gn(this)?this.state.gridSize:null);C(this,"updateEmbedValidationStatus",(t,r)=>{this.embedsValidationStatus.set(t.id,r),fr.delete(t)});C(this,"updateEmbeddables",()=>{let t=new Set,r=!1;this.scene.getNonDeletedElements().filter(n=>{if(Et(n)){if(t.add(n.id),!this.embedsValidationStatus.has(n.id)){r=!0;let i=li(n.link,this.props.validateEmbeddable);this.updateEmbedValidationStatus(n,i)}}else Qr(n)&&t.add(n.id);return!1}),r&&this.scene.triggerUpdate(),this.iFrameRefs.forEach((n,i)=>{t.has(i)||this.iFrameRefs.delete(i)})});C(this,"getFrameNameDOMId",t=>`${this.id}-frame-name-${t.id}`);C(this,"frameNameBoundsCache",{get:t=>{let r=this.frameNameBoundsCache._cache.get(t.id);if(!r||r.zoom!==this.state.zoom.value||r.versionNonce!==t.versionNonce){let n=document.getElementById(this.getFrameNameDOMId(t));if(n){let i=n.getBoundingClientRect(),a=Re({clientX:i.x,clientY:i.y},this.state),l=Re({clientX:i.right,clientY:i.bottom},this.state);return r={x:a.x,y:a.y,width:l.x-a.x,height:l.y-a.y,angle:0,zoom:this.state.zoom.value,versionNonce:t.versionNonce},this.frameNameBoundsCache._cache.set(t.id,r),r}return null}return r},_cache:new Map});C(this,"resetEditingFrame",t=>{t&&P(t,{name:t.name?.trim()||null}),this.setState({editingFrame:null})});C(this,"renderFrameNames",()=>{if(!this.state.frameRendering.enabled||!this.state.frameRendering.name)return this.state.editingFrame&&this.resetEditingFrame(null),null;let t=this.state.theme===re.DARK;return this.scene.getNonDeletedFramesLikes().map(r=>{if(!ka(r,this.canvas.width/window.devicePixelRatio,this.canvas.height/window.devicePixelRatio,{offsetLeft:this.state.offsetLeft,offsetTop:this.state.offsetTop,scrollX:this.state.scrollX,scrollY:this.state.scrollY,zoom:this.state.zoom},this.scene.getNonDeletedElementsMap()))return this.state.editingFrame===r.id&&this.resetEditingFrame(r),null;let{x:n,y:i}=xt({sceneX:r.x,sceneY:r.y},this.state),a=6,l,s=lE(r);if(r.id===this.state.editingFrame){let c=s;l=Ie("input",{autoFocus:!0,value:c,onChange:m=>{P(r,{name:m.target.value})},onFocus:m=>m.target.select(),onBlur:()=>this.resetEditingFrame(r),onKeyDown:m=>{(m.key===y.ESCAPE||m.key===y.ENTER)&&this.resetEditingFrame(r)},style:{background:this.state.viewBackgroundColor,filter:t?Th:"none",zIndex:2,border:"none",display:"block",padding:`${a}px`,borderRadius:4,boxShadow:"inset 0 0 0 1px var(--color-primary)",fontFamily:"Assistant",fontSize:"14px",transform:`translate(-${a}px, ${a}px)`,color:"var(--color-gray-80)",overflow:"hidden",maxWidth:`${document.body.clientWidth-n-a}px`},size:c.length+1||1,dir:"auto",autoComplete:"off",autoCapitalize:"off",autoCorrect:"off"})}else l=s;return Ie("div",{id:this.getFrameNameDOMId(r),style:{position:"absolute",bottom:`${this.state.height+mo.nameOffsetY-i+this.state.offsetTop}px`,left:`${n-this.state.offsetLeft}px`,zIndex:2,fontSize:mo.nameFontSize,color:t?mo.nameColorDarkTheme:mo.nameColorLightTheme,lineHeight:mo.nameLineHeight,width:"max-content",maxWidth:`${r.width}px`,overflow:r.id===this.state.editingFrame?"visible":"hidden",whiteSpace:"nowrap",textOverflow:"ellipsis",cursor:we.MOVE,pointerEvents:this.state.viewModeEnabled?Wr.disabled:Wr.enabled},onPointerDown:c=>this.handleCanvasPointerDown(c),onWheel:c=>this.handleWheel(c),onContextMenu:this.handleCanvasContextMenu,onDoubleClick:()=>{this.setState({editingFrame:r.id})},children:l},r.id)})});C(this,"focusContainer",()=>{this.excalidrawContainerRef.current?.focus()});C(this,"getSceneElementsIncludingDeleted",()=>this.scene.getElementsIncludingDeleted());C(this,"getSceneElements",()=>this.scene.getNonDeletedElements());C(this,"onInsertElements",t=>{this.addElementsFromPasteOrLibrary({elements:t,position:"center",files:null})});C(this,"onExportImage",async(t,r,n)=>{le("export",t,"ui");let i=await vn(t,r,this.state,this.files,{exportBackground:this.state.exportBackground,name:this.getName(),viewBackgroundColor:this.state.viewBackgroundColor,exportingFrame:n.exportingFrame}).catch(_l).catch(a=>{console.error(a),this.setState({errorMessage:a.message})});this.state.exportEmbedScene&&i&&xs(i)&&this.setState({fileHandle:i})});C(this,"magicGenerations",new Map);C(this,"updateMagicGeneration",({frameElement:t,data:r})=>{r.status==="pending"?P(t,{customData:{generationData:void 0}},!1):P(t,{customData:{generationData:r}},!1),this.magicGenerations.set(t.id,r),this.triggerRender()});C(this,"plugins",{});C(this,"onMagicframeToolSelect",()=>{let t=this.scene.getSelectedElements({selectedElementIds:this.state.selectedElementIds});if(t.length===0)this.setActiveTool({type:kt.magicframe}),le("ai","tool-select (empty-selection)","d2c");else{let r=t.length===1&&Nl(t[0])&&t[0];if(!r&&t.some(i=>ie(i)||i.frameId)){this.setActiveTool({type:kt.magicframe});return}le("ai","tool-select (existing selection)","d2c");let n;if(r)n=r;else{let[i,a,l,s]=Se(t),c=50;n=ba({...mo,x:i-c,y:a-c,width:l-i+c*2,height:s-a+c*2,opacity:100,locked:!1}),this.scene.insertElement(n);for(let m of t)P(m,{frameId:n.id});this.setState({selectedElementIds:{[n.id]:!0}})}this.onMagicFrameGenerate(n,"upstream")}});C(this,"openEyeDropper",({type:t})=>{st.set(Sr,{swapPreviewOnAlt:!0,colorPickerType:t==="stroke"?"elementStroke":"elementBackground",onSelect:(r,n)=>{let i=t==="background"&&n.altKey||t==="stroke"&&!n.altKey;!this.scene.getSelectedElements(this.state).length||this.state.activeTool.type!=="selection"?i?this.syncActionResult({appState:{...this.state,currentItemStrokeColor:r},captureUpdate:L.IMMEDIATELY}):this.syncActionResult({appState:{...this.state,currentItemBackgroundColor:r},captureUpdate:L.IMMEDIATELY}):this.updateScene({elements:this.scene.getElementsIncludingDeleted().map(l=>this.state.selectedElementIds[l.id]?q(l,{[i?"strokeColor":"backgroundColor"]:r}):l),captureUpdate:L.IMMEDIATELY})},keepOpenOnAlt:!1})});C(this,"dismissLinearEditor",()=>{setTimeout(()=>{this.setState({editingLinearElement:null})})});C(this,"syncActionResult",Fe(t=>{if(this.unmounted||t===!1)return;t.captureUpdate===L.NEVER?this.store.shouldUpdateSnapshot():t.captureUpdate===L.IMMEDIATELY&&this.store.shouldCaptureIncrement();let r=!1,n=null;if(t.elements&&(this.scene.replaceAllElements(t.elements),r=!0),t.files&&(this.addMissingFiles(t.files,t.replaceFiles),this.addNewImagesToImageCache()),t.appState||n||this.state.contextMenu){let i=t?.appState?.viewModeEnabled||!1,a=t?.appState?.zenModeEnabled||!1,l=t?.appState?.theme||this.props.theme||re.LIGHT,s=t?.appState?.name??this.state.name,c=t?.appState?.errorMessage??this.state.errorMessage;typeof this.props.viewModeEnabled<"u"&&(i=this.props.viewModeEnabled),typeof this.props.zenModeEnabled<"u"&&(a=this.props.zenModeEnabled),n=t.appState?.editingTextElement||null,t.elements&&n&&t.elements.forEach(m=>{n?.id===m.id&&n!==m&&sp(m)&&Y(m)&&(n=m)}),n?.isDeleted&&(n=null),this.setState(m=>{let d=t.appState||{};return{...m,...d,contextMenu:null,editingTextElement:n,viewModeEnabled:i,zenModeEnabled:a,theme:l,name:s,errorMessage:c}}),r=!0}!r&&t.captureUpdate!==L.EVENTUALLY&&this.scene.triggerUpdate()}));C(this,"onBlur",Fe(()=>{Mn=!1,this.setState({isBindingEnabled:!0})}));C(this,"onUnload",()=>{this.onBlur()});C(this,"disableEvent",t=>{t.preventDefault()});C(this,"resetHistory",()=>{this.history.clear()});C(this,"resetStore",()=>{this.store.clear()});C(this,"resetScene",Fe(t=>{this.scene.replaceAllElements([]),this.setState(r=>({...$n(),isLoading:t?.resetLoadingState?!1:r.isLoading,theme:this.state.theme})),this.resetStore(),this.resetHistory()}));C(this,"initializeScene",async()=>{"launchQueue"in window&&"LaunchParams"in window&&window.launchQueue.setConsumer(async n=>{if(!n.files.length)return;let i=n.files[0],a=await i.getFile();this.loadFileToCanvas(new File([a],a.name||"",{type:a.type}),i)}),this.props.theme&&this.setState({theme:this.props.theme}),this.state.isLoading||this.setState({isLoading:!0});let t=null;try{typeof this.props.initialData=="function"?t=await this.props.initialData()||null:t=await this.props.initialData||null,t?.libraryItems&&this.library.updateLibrary({libraryItems:t.libraryItems,merge:!0}).catch(n=>{console.error(n)})}catch(n){console.error(n),t={appState:{errorMessage:n.message||"Encountered an error during importing or restoring scene data"}}}let r=Rm(t,null,null,{repairBindings:!0});r.appState={...r.appState,theme:this.props.theme||r.appState.theme,openSidebar:r.appState?.openSidebar||this.state.openSidebar,activeTool:r.appState.activeTool.type==="image"?{...r.appState.activeTool,type:"selection"}:r.appState.activeTool,isLoading:!1,toast:this.state.toast},t?.scrollToContent&&(r.appState={...r.appState,...fn(r.elements,{...r.appState,width:this.state.width,height:this.state.height,offsetTop:this.state.offsetTop,offsetLeft:this.state.offsetLeft})}),this.resetStore(),this.resetHistory(),this.syncActionResult({...r,captureUpdate:L.NEVER}),this.clearImageShapeCache(),this.fonts.loadSceneFonts().then(n=>{this.fonts.onLoaded(n)}),pn(window.location.href)&&this.scrollToContent(window.location.href,{animate:!1})});C(this,"isMobileBreakpoint",(t,r)=>t<Ch||r<Sh&&t<Ih);C(this,"refreshViewportBreakpoints",()=>{if(!this.excalidrawContainerRef.current)return;let{clientWidth:r,clientHeight:n}=document.body,i=this.device.viewport,a=Hn(i,{isLandscape:r>n,isMobile:this.isMobileBreakpoint(r,n)});return i!==a?(this.device={...this.device,viewport:a},!0):!1});C(this,"refreshEditorBreakpoints",()=>{let t=this.excalidrawContainerRef.current;if(!t)return;let{width:r,height:n}=t.getBoundingClientRect(),i=this.props.UIOptions.dockedSidebarBreakpoint!=null?this.props.UIOptions.dockedSidebarBreakpoint:kh,a=this.device.editor,l=Hn(a,{isMobile:this.isMobileBreakpoint(r,n),canFitSidebar:r>i});return a!==l?(this.device={...this.device,editor:l},!0):!1});C(this,"onResize",Fe(()=>{this.scene.getElementsIncludingDeleted().forEach(t=>fr.delete(t)),this.refreshViewportBreakpoints(),this.updateDOMRect(),Qi||this.refreshEditorBreakpoints(),this.setState({})}));C(this,"onFullscreenChange",()=>{!document.fullscreenElement&&this.state.activeEmbeddable?.state==="active"&&this.setState({activeEmbeddable:null})});C(this,"renderInteractiveSceneCallback",({atLeastOneVisibleElement:t,scrollBars:r,elementsMap:n})=>{r&&(Pg=r);let i=this.state.editingTextElement?!1:!t&&n.size>0;this.state.scrolledOutside!==i&&this.setState({scrolledOutside:i}),this.scheduleImageRefresh()});C(this,"onScroll",$r(()=>{let{offsetTop:t,offsetLeft:r}=this.getCanvasOffsets();this.setState(n=>n.offsetLeft===r&&n.offsetTop===t?null:{offsetTop:t,offsetLeft:r})},vh));C(this,"onCut",Fe(t=>{!this.excalidrawContainerRef.current?.contains(document.activeElement)||Co(t.target)||(this.actionManager.executeAction(yc,"keyboard",t),t.preventDefault(),t.stopPropagation())}));C(this,"onCopy",Fe(t=>{!this.excalidrawContainerRef.current?.contains(document.activeElement)||Co(t.target)||(this.actionManager.executeAction(_i,"keyboard",t),t.preventDefault(),t.stopPropagation())}));C(this,"onTouchStart",t=>{if(ch&&t.preventDefault(),!al){al=!0,clearTimeout(Mg),Mg=window.setTimeout(e.resetTapTwice,Eh);return}if(al&&t.touches.length===1){let r=t.touches[0];this.handleCanvasDoubleClick({clientX:r.clientX,clientY:r.clientY}),al=!1,clearTimeout(Mg)}t.touches.length===2&&this.setState({selectedElementIds:Ee({},this.state),activeEmbeddable:null})});C(this,"onTouchEnd",t=>{this.resetContextMenuTimer(),t.touches.length>0?this.setState({previousSelectedElementIds:{},selectedElementIds:Ee(this.state.previousSelectedElementIds,this.state)}):fe.pointers.clear()});C(this,"pasteFromClipboard",Fe(async t=>{let r=!!Rd,n=document.activeElement,i=this.excalidrawContainerRef.current?.contains(n);if(t&&!i)return;let a=document.elementFromPoint(this.lastViewportPosition.x,this.lastViewportPosition.y);if(t&&(!(a instanceof HTMLCanvasElement)||Co(n)))return;let{x:l,y:s}=Re({clientX:this.lastViewportPosition.x,clientY:this.lastViewportPosition.y},this.state),c=t?.clipboardData?.files[0],m=await _s(t,r);if(!c&&!r){if(m.mixedContent)return this.addElementsFromMixedContentPaste(m.mixedContent,{isPlainPaste:r,sceneX:l,sceneY:s});if(m.text){let d=m.text.trim();d.startsWith("<svg")&&d.endsWith("</svg>")&&(c=Fm(d))}}if(Es(c)&&!m.spreadsheet){if(!this.isToolSupported("image")){this.setState({errorMessage:g("errors.imageToolNotSupported")});return}let d=this.createImageElement({sceneX:l,sceneY:s});this.insertImageElement(d,c),this.initializeImageDimensions(d),this.setState({selectedElementIds:Ee({[d.id]:!0},this.state)});return}if(this.props.onPaste)try{if(await this.props.onPaste(m,t)===!1)return}catch(d){console.error(d)}if(m.errorMessage)this.setState({errorMessage:m.errorMessage});else if(m.spreadsheet&&!r)this.setState({pasteDialog:{data:m.spreadsheet,shown:!0}});else if(m.elements){let d=m.programmaticAPI?Yi(m.elements):m.elements;this.addElementsFromPasteOrLibrary({elements:d,files:m.files||null,position:"cursor",retainSeed:r})}else if(m.text){if(m.text&&lT(m.text)){let u=await import("@excalidraw/mermaid-to-excalidraw");try{let{elements:h,files:f={}}=await u.parseMermaidToExcalidraw(m.text),b=Yi(h,{regenerateIds:!0});this.addElementsFromPasteOrLibrary({elements:b,files:f,position:"cursor"});return}catch(h){console.warn(`parsing pasted text as mermaid definition failed: ${h.message}`)}}let d=$h(m.text).split(/\n+/).map(u=>u.trim()).filter(Boolean),p=d.map(u=>Tx(u)).filter(u=>li(u,this.props.validateEmbeddable)&&(/^(http|https):\/\/[^\s/$.?#].[^\s]*$/.test(u)||dn(u)?.type==="video"));if(!Rd&&p.length>0&&p.length===d.length){let u=[];for(let h of p){let f=u[u.length-1],b=this.insertEmbeddableElement({sceneX:f?f.x+f.width+20:l,sceneY:s,link:uo(h)});b&&u.push(b)}u.length&&this.setState({selectedElementIds:Object.fromEntries(u.map(h=>[h.id,!0]))});return}this.addTextFromPaste(m.text,r)}this.setActiveTool({type:"selection"}),t?.preventDefault()}));C(this,"addElementsFromPasteOrLibrary",t=>{let r=Pm(t.elements,null,void 0),[n,i,a,l]=Se(r),s=jr(n,a)/2,c=jr(i,l)/2,m=typeof t.position=="object"?t.position.clientX:t.position==="cursor"?this.lastViewportPosition.x:this.state.width/2+this.state.offsetLeft,d=typeof t.position=="object"?t.position.clientY:t.position==="cursor"?this.lastViewportPosition.y:this.state.height/2+this.state.offsetTop,{x:p,y:u}=Re({clientX:m,clientY:d},this.state),h=p-s,f=u-c,[b,x]=nt(h,f,this.getEffectiveGridSize()),T=ls(r.map(k=>q(k,{x:k.x+b-n,y:k.y+x-i})),{randomizeSeed:!t.retainSeed}),E=this.scene.getElementsIncludingDeleted(),w=[...E,...T];w=this.props.onDuplicate?.(w,E)||w,fo(w,Q(T));let I=this.getTopLayerFrameAtSceneCoords({x:p,y:u});if(I){let k=iE(T,I);mi(w,k,I,this.state)}this.scene.replaceAllElements(w),T.forEach(k=>{if(Y(k)&&qe(k)){let R=Qt(k,this.scene.getElementsMapIncludingDeleted());Ue(k,R,this.scene.getElementsMapIncludingDeleted())}}),sh&&br.loadElementsFonts(T).then(k=>{this.fonts.onLoaded(k)}),t.files&&this.addMissingFiles(t.files),this.store.shouldCaptureIncrement();let _=Ys(T);this.setState({...this.state,openSidebar:this.state.openSidebar&&this.device.editor.canFitSidebar&&st.get(Ja)?this.state.openSidebar:null,...We({editingGroupId:null,selectedElementIds:_.reduce((k,R)=>(qe(R)||(k[R.id]=!0),k),{})},this.scene.getNonDeletedElements(),this.state,this)},()=>{t.files&&this.addNewImagesToImageCache()}),this.setActiveTool({type:"selection"}),t.fitToContent&&this.scrollToContent(T,{fitToContent:!0,canvasOffsets:this.getEditorUIOffsets()})});C(this,"setAppState",(t,r)=>{this.setState(t,r)});C(this,"removePointer",t=>{Ur&&this.resetContextMenuTimer(),fe.pointers.delete(t.pointerId)});C(this,"toggleLock",(t="ui")=>{this.state.activeTool.locked||le("toolbar","toggleLock",`${t} (${this.device.editor.isMobile?"mobile":"desktop"})`),this.setState(r=>({activeTool:{...r.activeTool,...Be(this.state,r.activeTool.locked?{type:"selection"}:r.activeTool),locked:!r.activeTool.locked}}))});C(this,"updateFrameRendering",t=>{this.setState(r=>{let n=typeof t=="function"?t(r.frameRendering):t;return{frameRendering:{enabled:n?.enabled??r.frameRendering.enabled,clip:n?.clip??r.frameRendering.clip,name:n?.name??r.frameRendering.name,outline:n?.outline??r.frameRendering.outline}}})});C(this,"togglePenMode",t=>{this.setState(r=>({penMode:t??!r.penMode,penDetected:!0}))});C(this,"onHandToolToggle",()=>{this.actionManager.executeAction(Zy)});C(this,"zoomCanvas",t=>{this.setState({...Qo({viewportX:this.state.width/2+this.state.offsetLeft,viewportY:this.state.height/2+this.state.offsetTop,nextZoom:Ao(t)},this.state)})});C(this,"cancelInProgressAnimation",null);C(this,"scrollToContent",(t=this.scene.getNonDeletedElements(),r)=>{if(typeof t=="string"){let s;if(pn(t)?s=Vx(t):s=t,s){let c=this.scene.getElementsFromId(s);c?.length?this.scrollToContent(c,{fitToContent:r?.fitToContent??!0,animate:r?.animate??!0}):pn(t)&&this.setState({toast:{message:g("elementLink.notFound"),duration:3e3,closable:!0}})}return}this.cancelInProgressAnimation?.();let n=Array.isArray(t)?t:[t],i=this.state.zoom,a=this.state.scrollX,l=this.state.scrollY;if(r?.fitToContent||r?.fitToViewport){let{appState:s}=Fa({canvasOffsets:r.canvasOffsets,targetElements:n,appState:this.state,fitToViewport:!!r?.fitToViewport,viewportZoomFactor:r?.viewportZoomFactor,minZoom:r?.minZoom,maxZoom:r?.maxZoom});i=s.zoom,a=s.scrollX,l=s.scrollY}else{let s=fn(n,this.state);a=s.scrollX,l=s.scrollY}if(r?.animate){let s=this.state.scrollX,c=this.state.scrollY,m=this.state.zoom.value,d=Fh({fromValues:{scrollX:s,scrollY:c,zoom:m},toValues:{scrollX:a,scrollY:l,zoom:i.value},interpolateValue:(p,u,h,f)=>{if(f==="zoom")return p*Math.pow(u/p,Zr(h))},onStep:({scrollX:p,scrollY:u,zoom:h})=>{this.setState({scrollX:p,scrollY:u,zoom:{value:h}})},onStart:()=>{this.setState({shouldCacheIgnoreZoom:!0})},onEnd:()=>{this.setState({shouldCacheIgnoreZoom:!1})},onCancel:()=>{this.setState({shouldCacheIgnoreZoom:!1})},duration:r?.duration??500});this.cancelInProgressAnimation=()=>{d(),this.cancelInProgressAnimation=null}}else this.setState({scrollX:a,scrollY:l,zoom:i})});C(this,"maybeUnfollowRemoteUser",()=>{this.state.userToFollow&&this.setState({userToFollow:null})});C(this,"translateCanvas",t=>{this.cancelInProgressAnimation?.(),this.maybeUnfollowRemoteUser(),this.setState(t)});C(this,"setToast",t=>{this.setState({toast:t})});C(this,"restoreFileFromShare",async()=>{try{let t=await caches.open("web-share-target"),r=await t.match("shared-file");if(r){let n=await r.blob(),i=new File([n],n.name||"",{type:n.type});this.loadFileToCanvas(i,null),await t.delete("shared-file"),window.history.replaceState(null,ea,window.location.pathname)}}catch(t){this.setState({errorMessage:t.message})}});C(this,"addFiles",Fe(t=>{let{addedFiles:r}=this.addMissingFiles(t);this.clearImageShapeCache(r),this.scene.triggerUpdate(),this.addNewImagesToImageCache()}));C(this,"addMissingFiles",(t,r=!1)=>{let n=r?{}:{...this.files},i={},a=Array.isArray(t)?t:Object.values(t);for(let l of a)if(!n[l.id]&&(i[l.id]=l,n[l.id]=l,l.mimeType===je.svg))try{let s=Dx(Hm(Rx(l.dataURL)),je.svg);l.dataURL!==s&&(l.version=(l.version??1)+1,l.dataURL=s)}catch(s){console.error(s)}return this.files=n,{addedFiles:i}});C(this,"updateScene",Fe(t=>{let r=Jo(t.elements??[]);if(t.captureUpdate&&t.captureUpdate!==L.EVENTUALLY){let n=this.store.snapshot.appState,i=this.store.snapshot.elements,a=t.appState?Object.assign({},n,t.appState):n,l=t.elements?this.store.filterUncomittedElements(this.scene.getElementsMapIncludingDeleted(),Q(r)):i;t.captureUpdate===L.IMMEDIATELY?this.store.captureIncrement(l,a):t.captureUpdate===L.NEVER&&this.store.updateSnapshot(l,a)}t.appState&&this.setState(t.appState),t.elements&&this.scene.replaceAllElements(r),t.collaborators&&this.setState({collaborators:t.collaborators})}));C(this,"triggerRender",t=>{t===!0?this.scene.triggerUpdate():this.setState({})});C(this,"toggleSidebar",({name:t,tab:r,force:n})=>{let i;n===void 0?i=this.state.openSidebar?.name===t&&this.state.openSidebar?.tab===r?null:t:i=n?t:null;let a=i?{name:i}:null;return a&&r&&(a.tab=r),this.setState({openSidebar:a}),!!i});C(this,"updateCurrentCursorPosition",Fe(t=>{this.lastViewportPosition.x=t.clientX,this.lastViewportPosition.y=t.clientY}));C(this,"getEditorUIOffsets",()=>{let t=this.excalidrawContainerRef?.current?.querySelector(".App-toolbar")?.getBoundingClientRect()?.bottom??0,r=this.excalidrawContainerRef?.current?.querySelector(".sidebar")?.getBoundingClientRect(),n=this.excalidrawContainerRef?.current?.querySelector(".App-menu__left")?.getBoundingClientRect(),i=16;return qo().rtl?{top:t+i,right:Math.max(this.state.width-(n?.left??this.state.width),0)+i,bottom:i,left:Math.max(r?.right??0,0)+i}:{top:t+i,right:Math.max(this.state.width-(r?.left??this.state.width)+i,0),bottom:i,left:Math.max(n?.right??0,0)+i}});C(this,"onKeyDown",Fe(t=>{if("Proxy"in window&&(!t.shiftKey&&/^[A-Z]$/.test(t.key)||t.shiftKey&&/^[a-z]$/.test(t.key))&&(t=new Proxy(t,{get(a,l){let s=a[l];return typeof s=="function"?s.bind(a):l==="key"?t.shiftKey?a.key.toUpperCase():a.key.toLowerCase():s}})),!rm(t.target)){if((t.key===y.ESCAPE||t.key===y.ENTER)&&this.state.croppingElementId){this.finishImageCropping();return}let a=$(this.scene.getNonDeletedElementsMap(),this.state);if(a.length===1&&xe(a[0])&&t.key===y.ENTER){this.startImageCropping(a[0]);return}if(t.key===y.ESCAPE&&this.flowChartCreator.isCreatingChart){this.flowChartCreator.clear(),this.triggerRender(!0);return}let l=an(t.key);if(t[y.CTRL_OR_CMD]&&l&&!t.shiftKey){t.preventDefault();let s=$(this.scene.getNonDeletedElementsMap(),this.state);s.length===1&&en(s[0])&&this.flowChartCreator.createNodes(s[0],this.scene.getNonDeletedElementsMap(),this.state,Hu(t.key)),this.flowChartCreator.pendingNodes?.length&&!gi(this.flowChartCreator.pendingNodes,this.canvas.width/window.devicePixelRatio,this.canvas.height/window.devicePixelRatio,{offsetLeft:this.state.offsetLeft,offsetTop:this.state.offsetTop,scrollX:this.state.scrollX,scrollY:this.state.scrollY,zoom:this.state.zoom},this.scene.getNonDeletedElementsMap(),this.getEditorUIOffsets())&&this.scrollToContent(this.flowChartCreator.pendingNodes,{animate:!0,duration:300,fitToContent:!0,canvasOffsets:this.getEditorUIOffsets()});return}if(t.altKey){let s=$(this.scene.getNonDeletedElementsMap(),this.state);if(s.length===1&&l){t.preventDefault();let c=this.flowChartNavigator.exploreByDirection(s[0],this.scene.getNonDeletedElementsMap(),Hu(t.key));if(c){this.setState(d=>({selectedElementIds:Ee({[c]:!0},d)}));let m=this.scene.getNonDeletedElementsMap().get(c);m&&!gi([m],this.canvas.width/window.devicePixelRatio,this.canvas.height/window.devicePixelRatio,{offsetLeft:this.state.offsetLeft,offsetTop:this.state.offsetTop,scrollX:this.state.scrollX,scrollY:this.state.scrollY,zoom:this.state.zoom},this.scene.getNonDeletedElementsMap(),this.getEditorUIOffsets())&&this.scrollToContent(m,{animate:!0,duration:300,canvasOffsets:this.getEditorUIOffsets()})}return}}}if(t[y.CTRL_OR_CMD]&&t.key===y.P&&!t.shiftKey&&!t.altKey){this.setToast({message:g("commandPalette.shortcutHint",{shortcut:Ye("commandPalette")})}),t.preventDefault();return}if(t[y.CTRL_OR_CMD]&&t.key.toLowerCase()===y.V&&(Rd=t.shiftKey,clearTimeout(pT),pT=window.setTimeout(()=>{Rd=!1},100)),t[y.CTRL_OR_CMD]&&Co(t.target)&&(t.code===te.MINUS||t.code===te.EQUAL)){t.preventDefault();return}if(Co(t.target)&&t.key!==y.ESCAPE||an(t.key)&&rm(t.target))return;if(t.key===y.QUESTION_MARK){this.setState({openDialog:{name:"help"}});return}else if(t.key.toLowerCase()===y.E&&t.shiftKey&&t[y.CTRL_OR_CMD]){t.preventDefault(),this.setState({openDialog:{name:"imageExport"}});return}if(t.key===y.PAGE_UP||t.key===y.PAGE_DOWN){let a=(t.shiftKey?this.state.width:this.state.height)/this.state.zoom.value;t.key===y.PAGE_DOWN&&(a=-a),t.shiftKey?this.translateCanvas(l=>({scrollX:l.scrollX+a})):this.translateCanvas(l=>({scrollY:l.scrollY+a}))}if(this.state.openDialog?.name==="elementLinkSelector"||this.actionManager.handleKeyDown(t)||this.state.viewModeEnabled)return;if(t[y.CTRL_OR_CMD]&&this.state.isBindingEnabled&&this.setState({isBindingEnabled:!1}),an(t.key)){let a=this.scene.getSelectedElements({selectedElementIds:this.state.selectedElementIds,includeBoundTextElement:!0,includeElementsInFrames:!0}),l=a.find(ee),s=new Set;a.filter(ee).filter(p=>{let u=p.startBinding&&!a.some(f=>f.id===p.startBinding?.elementId),h=p.endBinding&&!a.some(f=>f.id===p.endBinding?.elementId);return u||h}).forEach(p=>s.add(p.id)),a=a.filter(p=>!s.has(p.id));let c=this.getEffectiveGridSize()&&(t.shiftKey?Gd:this.getEffectiveGridSize())||(t.shiftKey?mh:Gd),m=0,d=0;t.key===y.ARROW_LEFT?m=-c:t.key===y.ARROW_RIGHT?m=c:t.key===y.ARROW_UP?d=-c:t.key===y.ARROW_DOWN&&(d=c),a.forEach(p=>{P(p,{x:p.x+m,y:p.y+d},!1),Jt(p,this.scene.getNonDeletedElementsMap(),{simultaneouslyUpdated:a})}),this.setState({suggestedBindings:gs(a.filter(p=>p.id!==l?.id||c!==0),this.scene.getNonDeletedElementsMap(),this.state.zoom)}),this.scene.triggerUpdate(),t.preventDefault()}else if(t.key===y.ENTER){let a=this.scene.getSelectedElements(this.state);if(a.length===1){let l=a[0];if(t[y.CTRL_OR_CMD])he(l)&&(!this.state.editingLinearElement||this.state.editingLinearElement.elementId!==a[0].id)&&(this.store.shouldCaptureIncrement(),ee(l)||this.setState({editingLinearElement:new K(l)}));else if(Y(l)||IE(l)){let s;Y(l)||(s=l);let c=Us(l,this.state,this.scene.getNonDeletedElementsMap()),m=c.x,d=c.y;this.startTextEditing({sceneX:m,sceneY:d,container:s}),t.preventDefault();return}else ie(l)&&this.setState({editingFrame:l.id})}}else if(!t.ctrlKey&&!t.altKey&&!t.metaKey&&!this.state.newElement&&!this.state.selectionElement&&!this.state.selectedElementsAreBeingDragged){let a=cx(t.key);a?(this.state.activeTool.type!==a&&le("toolbar",a,`keyboard (${this.device.editor.isMobile?"mobile":"desktop"})`),a==="arrow"&&this.state.activeTool.type==="arrow"&&this.setState(l=>({currentItemArrowType:l.currentItemArrowType===Je.sharp?Je.round:l.currentItemArrowType===Je.round?Je.elbow:Je.sharp})),this.setActiveTool({type:a}),t.stopPropagation()):t.key===y.Q&&(this.toggleLock("keyboard"),t.stopPropagation())}if(t.key===y.SPACE&&fe.pointers.size===0&&(Mn=!0,Te(this.interactiveCanvas,we.GRAB),t.preventDefault()),(t.key===y.G||t.key===y.S)&&!t.altKey&&!t[y.CTRL_OR_CMD]){let a=this.scene.getSelectedElements(this.state);if(this.state.activeTool.type==="selection"&&!a.length)return;t.key===y.G&&(vr(this.state.activeTool.type)||a.some(l=>vr(l.type)))&&(this.setState({openPopup:"elementBackground"}),t.stopPropagation()),t.key===y.S&&(this.setState({openPopup:"elementStroke"}),t.stopPropagation())}if(!t[y.CTRL_OR_CMD]&&t.shiftKey&&t.key.toLowerCase()===y.F){let a=this.scene.getSelectedElements(this.state);if(this.state.activeTool.type==="selection"&&!a.length)return;(this.state.activeTool.type==="text"||a.find(l=>Y(l)||ue(l,this.scene.getNonDeletedElementsMap())))&&(t.preventDefault(),this.setState({openPopup:"fontFamily"}))}if(t.key===y.K&&!t.altKey&&!t[y.CTRL_OR_CMD]){this.state.activeTool.type==="laser"?this.setActiveTool({type:"selection"}):this.setActiveTool({type:"laser"});return}t[y.CTRL_OR_CMD]&&(t.key===y.BACKSPACE||t.key===y.DELETE)&&st.set(In,"clearCanvas");let r=t.key.toLocaleLowerCase(),n=r===y.S&&t.shiftKey,i=t.key===y.I||r===y.G&&t.shiftKey;(n||i)&&this.openEyeDropper({type:n?"stroke":"background"})}));C(this,"onKeyUp",Fe(t=>{if(t.key===y.SPACE&&(this.state.viewModeEnabled||this.state.openDialog?.name==="elementLinkSelector"?Te(this.interactiveCanvas,we.GRAB):this.state.activeTool.type==="selection"?Zt(this.interactiveCanvas):(go(this.interactiveCanvas,this.state),this.setState({selectedElementIds:Ee({},this.state),selectedGroupIds:{},editingGroupId:null,activeEmbeddable:null})),Mn=!1),!t[y.CTRL_OR_CMD]&&!this.state.isBindingEnabled&&this.setState({isBindingEnabled:!0}),an(t.key)&&(cn(this.scene.getSelectedElements(this.state).filter(he),this.scene.getNonDeletedElementsMap(),this.scene.getNonDeletedElements(),this.scene,sn(this.state),this.state.selectedLinearElement?.selectedPointsIndices??[],this.state.zoom),this.setState({suggestedBindings:[]})),t.altKey||this.flowChartNavigator.isExploring&&(this.flowChartNavigator.clear(),this.syncActionResult({captureUpdate:L.IMMEDIATELY})),!t[y.CTRL_OR_CMD]&&this.flowChartCreator.isCreatingChart){this.flowChartCreator.pendingNodes?.length&&this.scene.insertElements(this.flowChartCreator.pendingNodes);let r=this.flowChartCreator.pendingNodes?.[0];r&&(this.setState(n=>({selectedElementIds:Ee({[r.id]:!0},n)})),gi([r],this.canvas.width/window.devicePixelRatio,this.canvas.height/window.devicePixelRatio,{offsetLeft:this.state.offsetLeft,offsetTop:this.state.offsetTop,scrollX:this.state.scrollX,scrollY:this.state.scrollY,zoom:this.state.zoom},this.scene.getNonDeletedElementsMap(),this.getEditorUIOffsets())||this.scrollToContent(r,{animate:!0,duration:300,canvasOffsets:this.getEditorUIOffsets()})),this.flowChartCreator.clear(),this.syncActionResult({captureUpdate:L.IMMEDIATELY})}}));C(this,"isToolSupported",t=>this.props.UIOptions.tools?.[t]!==!1);C(this,"setActiveTool",t=>{if(!this.isToolSupported(t.type)){console.warn(`"${t.type}" tool is disabled via "UIOptions.canvasActions.tools.${t.type}"`);return}let r=Be(this.state,t);r.type==="hand"?Te(this.interactiveCanvas,we.GRAB):Mn||go(this.interactiveCanvas,{...this.state,activeTool:r}),Nh(document.activeElement)&&this.focusContainer(),jh(r.type)||this.setState({suggestedBindings:[]}),r.type==="image"&&this.onImageAction({insertOnCanvasDirectly:(t.type==="image"&&t.insertOnCanvasDirectly)??!1}),this.setState(n=>{let i={snapLines:n.snapLines.length?[]:n.snapLines,originSnapOffset:null,activeEmbeddable:null};return r.type==="freedraw"&&this.store.shouldCaptureIncrement(),r.type!=="selection"?{...n,activeTool:r,selectedElementIds:Ee({},n),selectedGroupIds:Ee({},n),editingGroupId:null,multiElement:null,...i}:{...n,activeTool:r,...i}})});C(this,"setOpenDialog",t=>{this.setState({openDialog:t})});C(this,"setCursor",t=>{Te(this.interactiveCanvas,t)});C(this,"resetCursor",()=>{Zt(this.interactiveCanvas)});C(this,"isTouchScreenMultiTouchGesture",()=>fe.pointers.size>=2);C(this,"getName",()=>this.state.name||this.props.name||`${g("labels.untitled")}-${om()}`);C(this,"onGestureStart",Fe(t=>{t.preventDefault(),this.isTouchScreenMultiTouchGesture()&&this.setState({selectedElementIds:Ee({},this.state),activeEmbeddable:null}),fe.initialScale=this.state.zoom.value}));C(this,"onGestureChange",Fe(t=>{if(t.preventDefault(),this.isTouchScreenMultiTouchGesture())return;let r=fe.initialScale;r&&this.setState(n=>({...Qo({viewportX:this.lastViewportPosition.x,viewportY:this.lastViewportPosition.y,nextZoom:Ao(r*t.scale)},n)}))}));C(this,"onGestureEnd",Fe(t=>{t.preventDefault(),this.isTouchScreenMultiTouchGesture()&&this.setState({previousSelectedElementIds:{},selectedElementIds:Ee(this.state.previousSelectedElementIds,this.state)}),fe.initialScale=null}));C(this,"startTextEditing",({sceneX:t,sceneY:r,insertAtParentCenter:n=!0,container:i,autoEdit:a=!0})=>{let l=!1,s=n&&this.getTextWysiwygSnappedToCenterPosition(t,r,this.state,i);i&&s&&(ue(i,this.scene.getNonDeletedElementsMap())||(l=!0));let c=null,m=this.scene.getSelectedElements(this.state);m.length===1?Y(m[0])?c=m[0]:i?c=ue(m[0],this.scene.getNonDeletedElementsMap()):c=this.getTextElementAtPosition(t,r):c=this.getTextElementAtPosition(t,r);let d=c?.fontFamily||this.state.currentItemFontFamily,p=c?.lineHeight||$o(d),u=this.state.currentItemFontSize;if(!c&&l&&i&&!Ne(i)){let x=of(lt({fontSize:u,fontFamily:d}),p),T=lf(u,p),E=Math.max(i.height,T),w=Math.max(i.width,x);P(i,{height:E,width:w}),t=i.x+w/2,r=i.y+E/2,s&&(s=this.getTextWysiwygSnappedToCenterPosition(t,r,this.state,i))}let h=this.getTopLayerFrameAtSceneCoords({x:t,y:r}),f=c||So({x:s?s.elementCenterX:t,y:s?s.elementCenterY:r,strokeColor:this.state.currentItemStrokeColor,backgroundColor:this.state.currentItemBackgroundColor,fillStyle:this.state.currentItemFillStyle,strokeWidth:this.state.currentItemStrokeWidth,strokeStyle:this.state.currentItemStrokeStyle,roughness:this.state.currentItemRoughness,opacity:this.state.currentItemOpacity,text:"",fontSize:u,fontFamily:d,textAlign:s?"center":this.state.currentItemTextAlign,verticalAlign:s?Kt.MIDDLE:Vd,containerId:l?i?.id:void 0,groupIds:i?.groupIds??[],lineHeight:p,angle:i?.angle??0,frameId:h?h.id:null});if(!c&&l&&i&&P(i,{boundElements:(i.boundElements||[]).concat({type:"text",id:f.id})}),this.setState({editingTextElement:f}),!c)if(i&&l){let b=this.scene.getElementIndex(i.id);this.scene.insertElementAtIndex(f,b+1)}else this.scene.insertElement(f);a||c||i?this.handleTextWysiwyg(f,{isExistingElement:!!c}):this.setState({newElement:f,multiElement:null})});C(this,"startImageCropping",t=>{this.store.shouldCaptureIncrement(),this.setState({croppingElementId:t.id})});C(this,"finishImageCropping",()=>{this.state.croppingElementId&&(this.store.shouldCaptureIncrement(),this.setState({croppingElementId:null}))});C(this,"handleCanvasDoubleClick",t=>{if(this.state.multiElement||this.state.activeTool.type!=="selection")return;let r=this.scene.getSelectedElements(this.state),{x:n,y:i}=Re(t,this.state);if(r.length===1&&he(r[0])){if(t[y.CTRL_OR_CMD]&&(!this.state.editingLinearElement||this.state.editingLinearElement.elementId!==r[0].id)&&!ee(r[0])){this.store.shouldCaptureIncrement(),this.setState({editingLinearElement:new K(r[0])});return}else if(this.state.selectedLinearElement&&ee(r[0])){let l=K.getSegmentMidpointHitCoords(this.state.selectedLinearElement,{x:n,y:i},this.state,this.scene.getNonDeletedElementsMap()),s=l?K.getSegmentMidPointIndex(this.state.selectedLinearElement,this.state,l,this.scene.getNonDeletedElementsMap()):-1;if(s&&s>-1){this.store.shouldCaptureIncrement(),K.deleteFixedSegment(r[0],s);let c=K.getSegmentMidpointHitCoords({...this.state.selectedLinearElement,segmentMidPointHoveredCoords:null},{x:n,y:i},this.state,this.scene.getNonDeletedElementsMap()),m=c?K.getSegmentMidPointIndex(this.state.selectedLinearElement,this.state,c,this.scene.getNonDeletedElementsMap()):null;this.setState({selectedLinearElement:{...this.state.selectedLinearElement,pointerDownState:{...this.state.selectedLinearElement.pointerDownState,segmentMidpoint:{index:m,value:l,added:!1}},segmentMidPointHoveredCoords:c}});return}}}if(r.length===1&&xe(r[0])){this.startImageCropping(r[0]);return}if(Zt(this.interactiveCanvas),po(this.state).length>0){let l=this.getElementAtPosition(n,i),s=l&&uf(l,this.state.selectedGroupIds);if(s){this.store.shouldCaptureIncrement(),this.setState(c=>({...c,...We({editingGroupId:s,selectedElementIds:{[l.id]:!0}},this.scene.getNonDeletedElements(),c,this)}));return}}if(Zt(this.interactiveCanvas),!t[y.CTRL_OR_CMD]&&!this.state.viewModeEnabled){let l=this.getElementAtPosition(n,i);if(Wn(l)){this.setState({activeEmbeddable:{element:l,state:"active"}});return}let s=this.getTextBindableContainerAtPosition(n,i);if(s&&(ut(s)||!Jr(s.backgroundColor)||ai({x:n,y:i,element:s,shape:ln(s,this.scene.getNonDeletedElementsMap()),threshold:this.getElementHitThreshold()}))){let c=Us(s,this.state,this.scene.getNonDeletedElementsMap());n=c.x,i=c.y}this.startTextEditing({sceneX:n,sceneY:i,insertAtParentCenter:!t.altKey,container:s})}});C(this,"getElementLinkAtPosition",(t,r)=>{let n=this.scene.getNonDeletedElements(),i=-1;for(let a=n.length-1;a>=0;a--){let l=n[a];if(r&&l.id===r.id&&(i=a),l.link&&a>=i&&Ts(l,this.scene.getNonDeletedElementsMap(),this.state,z(t.x,t.y),this.device.editor.isMobile))return l}});C(this,"redirectToLink",(t,r)=>{let n=dr(z(this.lastPointerDownEvent.clientX,this.lastPointerDownEvent.clientY),z(this.lastPointerUpEvent.clientX,this.lastPointerUpEvent.clientY));if(!this.hitLinkElement||n>Vr)return;let i=Re(this.lastPointerDownEvent,this.state),a=this.scene.getNonDeletedElementsMap(),l=Ts(this.hitLinkElement,a,this.state,z(i.x,i.y),this.device.editor.isMobile),s=Re(this.lastPointerUpEvent,this.state),c=Ts(this.hitLinkElement,a,this.state,z(s.x,s.y),this.device.editor.isMobile);if(l&&c){lu();let m=this.hitLinkElement.link;if(m){m=uo(m);let d;if(this.props.onLinkOpen&&(d=Pl("excalidraw-link",t.nativeEvent),this.props.onLinkOpen({...this.hitLinkElement,link:m},d)),!d?.defaultPrevented){let p=zl(m)?"_self":"_blank",u=window.open(void 0,p);u&&(u.opener=null,u.location=m)}}}});C(this,"getTopLayerFrameAtSceneCoords",t=>{let r=this.scene.getNonDeletedElementsMap(),n=this.scene.getNonDeletedFramesLikes().filter(i=>Ym(t,i,r));return n.length?n[n.length-1]:null});C(this,"handleCanvasPointerMove",t=>{this.savePointer(t.clientX,t.clientY,this.state.cursorButton),this.lastPointerMoveEvent=t.nativeEvent,fe.pointers.has(t.pointerId)&&fe.pointers.set(t.pointerId,{x:t.clientX,y:t.clientY});let r=fe.initialScale;if(fe.pointers.size===2&&fe.lastCenter&&r&&fe.initialDistance){let u=Ou(fe.pointers),h=u.x-fe.lastCenter.x,f=u.y-fe.lastCenter.y;fe.lastCenter=u;let b=Fu(Array.from(fe.pointers.values())),x=this.state.activeTool.type==="freedraw"&&this.state.penMode?1:b/fe.initialDistance,T=x?Ao(r*x):this.state.zoom.value;this.setState(E=>{let w=Qo({viewportX:u.x,viewportY:u.y,nextZoom:T},E);this.translateCanvas({zoom:w.zoom,scrollX:w.scrollX+2*(h/T),scrollY:w.scrollY+2*(f/T),shouldCacheIgnoreZoom:!0})}),this.resetShouldCacheIgnoreZoomDebounced()}else fe.lastCenter=fe.initialDistance=fe.initialScale=null;if(Mn||ll||Dg||Xo(this.state))return;let i=Gu(Pg,t.clientX-this.state.offsetLeft,t.clientY-this.state.offsetTop).isOverEither;!this.state.newElement&&!this.state.selectionElement&&!this.state.selectedElementsAreBeingDragged&&!this.state.multiElement&&(i?Zt(this.interactiveCanvas):go(this.interactiveCanvas,this.state));let a=Re(t,this.state),{x:l,y:s}=a;if(!this.state.newElement&&fE(this.state.activeTool.type)){let{originOffset:u,snapLines:h}=hE(this.scene.getNonDeletedElements(),this,{x:l,y:s},t,this.scene.getNonDeletedElementsMap());this.setState(f=>{let b=Yn(f.snapLines,h),x=f.originSnapOffset?Yn(f.originSnapOffset,u):u;return f.snapLines===b&&f.originSnapOffset===x?null:{snapLines:b,originSnapOffset:x}})}else!this.state.newElement&&!this.state.selectedElementsAreBeingDragged&&!this.state.selectionElement&&this.setState(u=>u.snapLines.length?{snapLines:[]}:null);if(this.state.editingLinearElement&&!this.state.editingLinearElement.isDragging){let u=K.handlePointerMove(t,l,s,this,this.scene.getNonDeletedElementsMap());u&&u!==this.state.editingLinearElement&&_n(()=>{this.setState({editingLinearElement:u})}),u?.lastUncommittedPoint!=null?this.maybeSuggestBindingAtCursor(a,u.elbowed):_n(()=>{this.setState({suggestedBindings:[]})})}if(Jh(this.state.activeTool.type)){let{newElement:u}=this.state;Wo(u,!1)?this.maybeSuggestBindingsForLinearElementAtCoords(u,[a],this.state.startBoundElement):this.maybeSuggestBindingAtCursor(a,!1)}if(this.state.multiElement){let{multiElement:u}=this.state,{x:h,y:f}=u,{points:b,lastCommittedPoint:x}=u,T=b[b.length-1];if(go(this.interactiveCanvas,this.state),T===x)dr(z(l-h,s-f),T)>=El?P(u,{points:[...b,z(l-h,s-f)]},!1):Te(this.interactiveCanvas,we.POINTER);else if(b.length>2&&x&&dr(z(l-h,s-f),x)<El)Te(this.interactiveCanvas,we.POINTER),P(u,{points:b.slice(0,-1)},!1);else{let[E,w]=nt(l,s,t[y.CTRL_OR_CMD]||ee(u)?null:this.getEffectiveGridSize()),[S,I]=u?.lastCommittedPoint??[0,0],_=E-h-S,k=w-f-I;ds(t)&&({width:_,height:k}=tp(S+h,I+f,E,w)),xa(b,this.state.zoom.value)&&Te(this.interactiveCanvas,we.POINTER),P(u,{points:[...b.slice(0,-1),z(S+_,I+k)]},!1,{isDragging:!0}),this.triggerRender(!1)}return}if(!!t.buttons||this.state.activeTool.type!=="selection"&&this.state.activeTool.type!=="text"&&this.state.activeTool.type!=="eraser")return;let m=this.scene.getNonDeletedElements(),d=this.scene.getSelectedElements(this.state);if(d.length===1&&!i&&!this.state.editingLinearElement){if(this.state.selectedLinearElement&&this.handleHoverSelectedLinearElement(this.state.selectedLinearElement,l,s),(!this.state.selectedLinearElement||this.state.selectedLinearElement.hoverPointIndex===-1)&&this.state.openDialog?.name!=="elementLinkSelector"&&!(d.length===1&&ee(d[0]))){let u=op(m,this.state,l,s,this.state.zoom,t.pointerType,this.scene.getNonDeletedElementsMap(),this.device);if(u&&u.transformHandleType){Te(this.interactiveCanvas,np(u));return}}}else if(d.length>1&&!i&&this.state.openDialog?.name!=="elementLinkSelector"){let u=rp(Se(d),l,s,this.state.zoom,t.pointerType,this.device);if(u){Te(this.interactiveCanvas,np({transformHandleType:u}));return}}let p=this.getElementAtPosition(a.x,a.y);this.hitLinkElement=this.getElementLinkAtPosition(a,p),!$t(this.state)&&(this.hitLinkElement&&!this.state.selectedElementIds[this.hitLinkElement.id]?(Te(this.interactiveCanvas,we.POINTER),Tv(this.hitLinkElement,this.state,this.scene.getNonDeletedElementsMap())):(lu(),p&&(p.link||Et(p))&&this.state.selectedElementIds[p.id]&&!this.state.contextMenu&&!this.state.showHyperlinkPopup?this.setState({showHyperlinkPopup:"info"}):this.state.activeTool.type==="text"?Te(this.interactiveCanvas,Y(p)?we.TEXT:we.CROSSHAIR):this.state.viewModeEnabled?Te(this.interactiveCanvas,we.GRAB):this.state.openDialog?.name==="elementLinkSelector"?Te(this.interactiveCanvas,we.AUTO):i?Te(this.interactiveCanvas,we.AUTO):this.state.selectedLinearElement?this.handleHoverSelectedLinearElement(this.state.selectedLinearElement,l,s):t[y.CTRL_OR_CMD]?Te(this.interactiveCanvas,we.AUTO):(p||this.isHittingCommonBoundingBoxOfSelectedElements(a,d))&&!p?.locked&&(p&&Wn(p)&&this.isIframeLikeElementCenter(p,t,l,s)?(Te(this.interactiveCanvas,we.POINTER),this.setState({activeEmbeddable:{element:p,state:"hover"}})):(!p||!ee(p))&&(Te(this.interactiveCanvas,we.MOVE),this.state.activeEmbeddable?.state==="hover"&&this.setState({activeEmbeddable:null})))),this.state.openDialog?.name==="elementLinkSelector"&&p?this.setState(u=>({hoveredElementIds:Yn(u.hoveredElementIds,We({editingGroupId:u.editingGroupId,selectedElementIds:{[p.id]:!0}},this.scene.getNonDeletedElements(),u,this).selectedElementIds)})):this.state.openDialog?.name==="elementLinkSelector"&&!p&&this.setState(u=>({hoveredElementIds:Yn(u.hoveredElementIds,{})})))});C(this,"handleEraser",(t,r,n)=>{this.eraserTrail.addPointToPath(n.x,n.y);let i=!1,a=new Set,l=this.scene.getNonDeletedElements(),s=u=>{for(let h of u){if(h.locked)return;if(t.altKey?this.elementsPendingErasure.delete(h.id)&&(i=!0):this.elementsPendingErasure.has(h.id)||(i=!0,this.elementsPendingErasure.add(h.id)),i&&h.groupIds?.length){let f=h.groupIds.at(-1);if(!a.has(f)){a.add(f);let b=Le(l,f);for(let x of b)t.altKey?this.elementsPendingErasure.delete(x.id):this.elementsPendingErasure.add(x.id)}}}},c=dr(z(r.lastCoords.x,r.lastCoords.y),z(n.x,n.y)),m=this.getElementHitThreshold(),d={...r.lastCoords},p=0;for(;p<=c;){let u=this.getElementsAtPosition(d.x,d.y);if(s(u),p===c)break;p=Math.min(p+m,c);let h=p/c,f=(1-h)*d.x+h*n.x,b=(1-h)*d.y+h*n.y;d.x=f,d.y=b}if(r.lastCoords.x=n.x,r.lastCoords.y=n.y,i){for(let u of this.scene.getNonDeletedElements())qe(u)&&(this.elementsPendingErasure.has(u.id)||this.elementsPendingErasure.has(u.containerId))&&(t.altKey?(this.elementsPendingErasure.delete(u.id),this.elementsPendingErasure.delete(u.containerId)):(this.elementsPendingErasure.add(u.id),this.elementsPendingErasure.add(u.containerId)));this.elementsPendingErasure=new Set(this.elementsPendingErasure),this.triggerRender()}});C(this,"handleTouchMove",t=>{sl=!0});C(this,"handleCanvasPointerDown",t=>{let r=t.target;if(r.setPointerCapture&&r.setPointerCapture(t.pointerId),this.maybeCleanupAfterMissingPointerUp(t.nativeEvent),this.maybeUnfollowRemoteUser(),this.state.searchMatches&&(this.setState(d=>({searchMatches:d.searchMatches.map(p=>({...p,focus:!1}))})),st.set(cg,null)),this.state.contextMenu&&this.setState({contextMenu:null}),this.state.snapLines&&this.setAppState({snapLines:[]}),this.updateGestureOnPointerDown(t),t.pointerType==="touch"&&this.state.newElement&&this.state.newElement.type==="freedraw"){let d=this.state.newElement;this.updateScene({...d.points.length<10?{elements:this.scene.getElementsIncludingDeleted().filter(p=>p.id!==d.id)}:{},appState:{newElement:null,editingTextElement:null,startBoundElement:null,suggestedBindings:[],selectedElementIds:Ee(Object.keys(this.state.selectedElementIds).filter(p=>p!==d.id).reduce((p,u)=>(p[u]=this.state.selectedElementIds[u],p),{}),this.state)},captureUpdate:this.state.openDialog?.name==="elementLinkSelector"?L.EVENTUALLY:L.NEVER});return}let n=document.getSelection();if(n?.anchorNode&&n.removeAllRanges(),this.maybeOpenContextMenuAfterPointerDownOnTouchDevices(t),!this.state.penDetected&&t.pointerType==="pen"&&this.setState(d=>({penMode:!0,penDetected:!0})),!this.device.isTouchScreen&&["pen","touch"].includes(t.pointerType)&&(this.device=Hn(this.device,{isTouchScreen:!0})),ll||(this.lastPointerDownEvent=t,this.handleCanvasPanUsingWheelOrSpaceDrag(t)))return;if(this.setState({lastPointerDownWith:t.pointerType,cursorButton:"down"}),this.savePointer(t.clientX,t.clientY,"down"),t.button===To.ERASER&&this.state.activeTool.type!==kt.eraser){this.setState({activeTool:Be(this.state,{type:kt.eraser,lastActiveToolBeforeEraser:this.state.activeTool})},()=>{this.handleCanvasPointerDown(t);let d=()=>{p(),u?.(),$t(this.state)&&this.setState({activeTool:Be(this.state,{...this.state.activeTool.lastActiveTool||{type:kt.selection},lastActiveToolBeforeEraser:null})})},p=Ae(window,"pointerup",d,{once:!0}),u;requestAnimationFrame(()=>{u=this.missingPointerEventCleanupEmitter.once(d)})});return}if(t.button!==To.MAIN&&t.button!==To.TOUCH&&t.button!==To.ERASER||fe.pointers.size>1)return;let i=this.initialPointerDownState(t);if(this.setState({selectedElementsAreBeingDragged:!1}),this.handleDraggingScrollBar(t,i)||(this.clearSelectionIfNotUsingSelection(),this.updateBindingEnabledOnPointerMove(t),this.handleSelectionOnPointerDown(t,i))||!(!this.state.penMode||t.pointerType!=="touch"||this.state.activeTool.type==="selection"||this.state.activeTool.type==="text"||this.state.activeTool.type==="image"))return;if(this.state.activeTool.type==="text")this.handleTextOnPointerDown(t,i);else if(this.state.activeTool.type==="arrow"||this.state.activeTool.type==="line")this.handleLinearElementOnPointerDown(t,this.state.activeTool.type,i);else if(this.state.activeTool.type==="image"){Te(this.interactiveCanvas,we.CROSSHAIR);let d=this.state.pendingImageElementId&&this.scene.getElement(this.state.pendingImageElementId);if(!d)return;this.setState({newElement:d,pendingImageElementId:null,multiElement:null});let{x:p,y:u}=Re(t,this.state),h=this.getTopLayerFrameAtSceneCoords({x:p,y:u});P(d,{x:p,y:u,frameId:h?h.id:null})}else this.state.activeTool.type==="freedraw"?this.handleFreeDrawElementOnPointerDown(t,this.state.activeTool.type,i):this.state.activeTool.type==="custom"?go(this.interactiveCanvas,this.state):this.state.activeTool.type===kt.frame||this.state.activeTool.type===kt.magicframe?this.createFrameElementOnPointerDown(i,this.state.activeTool.type):this.state.activeTool.type==="laser"?this.laserTrails.startPath(i.lastCoords.x,i.lastCoords.y):this.state.activeTool.type!=="eraser"&&this.state.activeTool.type!=="hand"&&this.createGenericElementOnPointerDown(this.state.activeTool.type,i);this.props?.onPointerDown?.(this.state.activeTool,i),this.onPointerDownEmitter.trigger(this.state.activeTool,i,t),this.state.activeTool.type==="eraser"&&this.eraserTrail.startPath(i.lastCoords.x,i.lastCoords.y);let l=this.onPointerMoveFromPointerDownHandler(i),s=this.onPointerUpFromPointerDownHandler(i),c=this.onKeyDownFromPointerDownHandler(i),m=this.onKeyUpFromPointerDownHandler(i);this.missingPointerEventCleanupEmitter.once(d=>s(d||t.nativeEvent)),(!this.state.viewModeEnabled||this.state.activeTool.type==="laser")&&(window.addEventListener("pointermove",l),window.addEventListener("pointerup",s),window.addEventListener("keydown",c),window.addEventListener("keyup",m),i.eventListeners.onMove=l,i.eventListeners.onUp=s,i.eventListeners.onKeyUp=m,i.eventListeners.onKeyDown=c)});C(this,"handleCanvasPointerUp",t=>{this.removePointer(t),this.lastPointerUpEvent=t;let r=Re({clientX:t.clientX,clientY:t.clientY},this.state),n=t.timeStamp-(this.lastPointerDownEvent?.timeStamp??0);if(this.device.editor.isMobile&&n<300){let i=this.getElementAtPosition(r.x,r.y);if(Wn(i)&&this.isIframeLikeElementCenter(i,t,r.x,r.y)){this.handleEmbeddableCenterClick(i);return}}if(this.device.isTouchScreen){let i=this.getElementAtPosition(r.x,r.y);this.hitLinkElement=this.getElementLinkAtPosition(r,i)}this.hitLinkElement&&!this.state.selectedElementIds[this.hitLinkElement.id]?n<300&&Wn(this.hitLinkElement)&&!Yx(this.hitLinkElement,this.scene.getNonDeletedElementsMap(),this.state,z(r.x,r.y))?this.handleEmbeddableCenterClick(this.hitLinkElement):this.redirectToLink(t,this.device.isTouchScreen):this.state.viewModeEnabled&&this.setState({activeEmbeddable:null,selectedElementIds:{}})});C(this,"maybeOpenContextMenuAfterPointerDownOnTouchDevices",t=>{t.pointerType==="touch"&&(sl=!1,Ur?sl=!0:Ur=window.setTimeout(()=>{Ur=0,sl||this.handleCanvasContextMenu(t)},yh))});C(this,"resetContextMenuTimer",()=>{clearTimeout(Ur),Ur=0,sl=!1});C(this,"maybeCleanupAfterMissingPointerUp",t=>{cl?.(),this.missingPointerEventCleanupEmitter.trigger(t).clear()});C(this,"handleCanvasPanUsingWheelOrSpaceDrag",t=>{if(!(fe.pointers.size<=1&&(t.button===To.WHEEL||t.button===To.MAIN&&Mn||Xo(this.state)||this.state.viewModeEnabled)))return!1;ll=!0,this.focusContainer(),this.state.editingTextElement||t.preventDefault();let r=!1,n=typeof window===void 0?!1:/Linux/.test(window.navigator.platform);Te(this.interactiveCanvas,we.GRABBING);let{clientX:i,clientY:a}=t,l=Ad(c=>{let m=i-c.clientX,d=a-c.clientY;if(i=c.clientX,a=c.clientY,n&&!r&&(Math.abs(m)>1||Math.abs(d)>1)){r=!0;let p=h=>{document.body.removeEventListener("paste",p),h.stopPropagation()},u=()=>{setTimeout(()=>{document.body.removeEventListener("paste",p),window.removeEventListener("pointerup",u)},100)};document.body.addEventListener("paste",p),window.addEventListener("pointerup",u)}this.translateCanvas({scrollX:this.state.scrollX-m/this.state.zoom.value,scrollY:this.state.scrollY-d/this.state.zoom.value})}),s=Fe(cl=()=>{cl=null,ll=!1,Mn||(this.state.viewModeEnabled?Te(this.interactiveCanvas,we.GRAB):go(this.interactiveCanvas,this.state)),this.setState({cursorButton:"up"}),this.savePointer(t.clientX,t.clientY,"up"),window.removeEventListener("pointermove",l),window.removeEventListener("pointerup",s),window.removeEventListener("blur",s),l.flush()});return window.addEventListener("blur",s),window.addEventListener("pointermove",l,{passive:!0}),window.addEventListener("pointerup",s),!0});C(this,"clearSelectionIfNotUsingSelection",()=>{this.state.activeTool.type!=="selection"&&this.setState({selectedElementIds:Ee({},this.state),selectedGroupIds:{},editingGroupId:null,activeEmbeddable:null})});C(this,"handleSelectionOnPointerDown",(t,r)=>{if(this.state.activeTool.type==="selection"){let n=this.scene.getNonDeletedElements(),i=this.scene.getNonDeletedElementsMap(),a=this.scene.getSelectedElements(this.state);if(a.length===1&&!this.state.editingLinearElement&&!ee(a[0])&&!(this.state.selectedLinearElement&&this.state.selectedLinearElement.hoverPointIndex!==-1)){let l=op(n,this.state,r.origin.x,r.origin.y,this.state.zoom,t.pointerType,this.scene.getNonDeletedElementsMap(),this.device);l!=null&&(l.transformHandleType==="rotation"?(this.setState({resizingElement:l.element}),r.resize.handleType=l.transformHandleType):(this.state.croppingElementId||this.setState({resizingElement:l.element}),r.resize.handleType=l.transformHandleType))}else a.length>1&&(r.resize.handleType=rp(Se(a),r.origin.x,r.origin.y,this.state.zoom,t.pointerType,this.device));if(r.resize.handleType)r.resize.isResizing=!0,r.resize.offset=pr(RE(r.resize.handleType,a,i,r.origin.x,r.origin.y)),a.length===1&&he(a[0])&&a[0].points.length===2&&(r.resize.arrowDirection=NE(r.resize.handleType,a[0]));else{if(this.state.selectedLinearElement){let c=this.state.editingLinearElement||this.state.selectedLinearElement,m=K.handlePointerDown(t,this,this.store,r.origin,c,this.scene);if(m.hitElement&&(r.hit.element=m.hitElement),m.linearElementEditor&&(this.setState({selectedLinearElement:m.linearElementEditor}),this.state.editingLinearElement&&this.setState({editingLinearElement:m.linearElementEditor})),m.didAddPoint)return!0}if(r.hit.element=r.hit.element??this.getElementAtPosition(r.origin.x,r.origin.y),this.hitLinkElement=this.getElementLinkAtPosition(r.origin,r.hit.element),this.hitLinkElement)return!0;if(this.state.croppingElementId&&r.hit.element?.id!==this.state.croppingElementId&&this.finishImageCropping(),r.hit.element&&this.getElementLinkAtPosition({x:r.origin.x,y:r.origin.y},r.hit.element))return!1;r.hit.allHitElements=this.getElementsAtPosition(r.origin.x,r.origin.y);let l=r.hit.element,s=r.hit.allHitElements.some(c=>this.isASelectedElement(c));if((l===null||!s)&&!t.shiftKey&&!r.hit.hasHitCommonBoundingBoxOfSelectedElements&&this.clearSelection(l),this.state.editingLinearElement)this.setState({selectedElementIds:Ee({[this.state.editingLinearElement.elementId]:!0},this.state)});else if(l!=null){if(t[y.CTRL_OR_CMD])return this.state.selectedElementIds[l.id]||(r.hit.wasAddedToSelection=!0),this.setState(c=>({...pf(c,l),previousSelectedElementIds:this.state.selectedElementIds})),!1;this.state.selectedElementIds[l.id]||(this.state.editingGroupId&&!Zn(l,this.state.editingGroupId)&&this.setState({selectedElementIds:Ee({},this.state),selectedGroupIds:{},editingGroupId:null,activeEmbeddable:null}),!s&&!r.hit.hasHitCommonBoundingBoxOfSelectedElements&&(this.setState(c=>{let m={...c.selectedElementIds,[l.id]:!0},d=[];if(Object.keys(c.selectedElementIds).forEach(p=>{let u=this.scene.getElement(p);u&&d.push(u)}),ie(l))ko(d,l.id).forEach(p=>{delete m[p.id]});else if(l.frameId)m[l.frameId]&&delete m[l.id];else{let p=l.groupIds,u=new Set(p.flatMap(h=>Le(this.scene.getNonDeletedElements(),h)).filter(h=>ie(h)).map(h=>h.id));u.size>0&&d.forEach(h=>{h.frameId&&u.has(h.frameId)&&(delete m[h.id],h.groupIds.flatMap(f=>Le(this.scene.getNonDeletedElements(),f)).forEach(f=>{delete m[f.id]}))})}return c.openDialog?.name==="elementLinkSelector"&&(l.groupIds.some(p=>c.selectedGroupIds[p])||(m={[l.id]:!0})),{...We({editingGroupId:c.editingGroupId,selectedElementIds:m},this.scene.getNonDeletedElements(),c,this),showHyperlinkPopup:l.link||Et(l)?"info":!1}}),r.hit.wasAddedToSelection=!0))}this.setState({previousSelectedElementIds:this.state.selectedElementIds})}}return!1});C(this,"handleTextOnPointerDown",(t,r)=>{if(this.state.editingTextElement)return;let n=r.origin.x,i=r.origin.y,a=this.getElementAtPosition(n,i,{includeBoundTextElement:!0}),l=this.getTextBindableContainerAtPosition(n,i);ut(a)&&(l=a,n=a.x+a.width/2,i=a.y+a.height/2),this.startTextEditing({sceneX:n,sceneY:i,insertAtParentCenter:!t.altKey,container:l,autoEdit:!1}),Zt(this.interactiveCanvas),this.state.activeTool.locked||this.setState({activeTool:Be(this.state,{type:"selection"})})});C(this,"handleFreeDrawElementOnPointerDown",(t,r,n)=>{let[i,a]=nt(n.origin.x,n.origin.y,null),l=this.getTopLayerFrameAtSceneCoords({x:i,y:a}),s=t.pressure===.5,c=rx({type:r,x:i,y:a,strokeColor:this.state.currentItemStrokeColor,backgroundColor:this.state.currentItemBackgroundColor,fillStyle:this.state.currentItemFillStyle,strokeWidth:this.state.currentItemStrokeWidth,strokeStyle:this.state.currentItemStrokeStyle,roughness:this.state.currentItemRoughness,opacity:this.state.currentItemOpacity,roundness:null,simulatePressure:s,locked:!1,frameId:l?l.id:null,points:[z(0,0)],pressures:s?[]:[t.pressure]});this.scene.insertElement(c),this.setState(d=>{let p={...d.selectedElementIds};return delete p[c.id],{selectedElementIds:Ee(p,d)}});let m=Er(n.origin,this.scene.getNonDeletedElements(),this.scene.getNonDeletedElementsMap(),this.state.zoom);this.setState({newElement:c,startBoundElement:m,suggestedBindings:[]})});C(this,"insertIframeElement",({sceneX:t,sceneY:r,width:n,height:i})=>{let[a,l]=nt(t,r,this.lastPointerDownEvent?.[y.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),s=tx({type:"iframe",x:a,y:l,strokeColor:"transparent",backgroundColor:"transparent",fillStyle:this.state.currentItemFillStyle,strokeWidth:this.state.currentItemStrokeWidth,strokeStyle:this.state.currentItemStrokeStyle,roughness:this.state.currentItemRoughness,roundness:this.getCurrentItemRoundness("iframe"),opacity:this.state.currentItemOpacity,locked:!1,width:n,height:i});return this.scene.insertElement(s),s});C(this,"insertEmbeddableElement",({sceneX:t,sceneY:r,link:n})=>{let[i,a]=nt(t,r,this.lastPointerDownEvent?.[y.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),l=dn(n);if(!l)return;l.error instanceof URIError&&this.setToast({message:g("toast.unrecognizedLinkFormat"),closable:!0});let s=km({type:"embeddable",x:i,y:a,strokeColor:"transparent",backgroundColor:"transparent",fillStyle:this.state.currentItemFillStyle,strokeWidth:this.state.currentItemStrokeWidth,strokeStyle:this.state.currentItemStrokeStyle,roughness:this.state.currentItemRoughness,roundness:this.getCurrentItemRoundness("embeddable"),opacity:this.state.currentItemOpacity,locked:!1,width:l.intrinsicSize.w,height:l.intrinsicSize.h,link:n});return this.scene.insertElement(s),s});C(this,"createImageElement",({sceneX:t,sceneY:r,addToFrameUnderCursor:n=!0})=>{let[i,a]=nt(t,r,this.lastPointerDownEvent?.[y.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),l=n?this.getTopLayerFrameAtSceneCoords({x:i,y:a}):null;return is({type:"image",x:i,y:a,strokeColor:this.state.currentItemStrokeColor,backgroundColor:this.state.currentItemBackgroundColor,fillStyle:this.state.currentItemFillStyle,strokeWidth:this.state.currentItemStrokeWidth,strokeStyle:this.state.currentItemStrokeStyle,roughness:this.state.currentItemRoughness,roundness:null,opacity:this.state.currentItemOpacity,locked:!1,frameId:l?l.id:null})});C(this,"handleLinearElementOnPointerDown",(t,r,n)=>{if(this.state.multiElement){let{multiElement:i}=this.state;if(i.type==="line"&&xa(i.points,this.state.zoom.value)){P(i,{lastCommittedPoint:i.points[i.points.length-1]}),this.actionManager.executeAction(Ht);return}if(ee(i)&&i.points.length>1){P(i,{lastCommittedPoint:i.points[i.points.length-1]}),this.actionManager.executeAction(Ht);return}let{x:a,y:l,lastCommittedPoint:s}=i;if(i.points.length>1&&s&&dr(z(n.origin.x-a,n.origin.y-l),s)<El){this.actionManager.executeAction(Ht);return}this.setState(c=>({selectedElementIds:Ee({...c.selectedElementIds,[i.id]:!0},c)})),P(i,{lastCommittedPoint:i.points[i.points.length-1]}),Te(this.interactiveCanvas,we.POINTER)}else{let[i,a]=nt(n.origin.x,n.origin.y,t[y.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),l=this.getTopLayerFrameAtSceneCoords({x:i,y:a}),{currentItemStartArrowhead:s,currentItemEndArrowhead:c}=this.state,[m,d]=r==="arrow"?[s,c]:[null,null],p=r==="arrow"?ni({type:r,x:i,y:a,strokeColor:this.state.currentItemStrokeColor,backgroundColor:this.state.currentItemBackgroundColor,fillStyle:this.state.currentItemFillStyle,strokeWidth:this.state.currentItemStrokeWidth,strokeStyle:this.state.currentItemStrokeStyle,roughness:this.state.currentItemRoughness,opacity:this.state.currentItemOpacity,roundness:this.state.currentItemArrowType===Je.round?{type:St.PROPORTIONAL_RADIUS}:null,startArrowhead:m,endArrowhead:d,locked:!1,frameId:l?l.id:null,elbowed:this.state.currentItemArrowType===Je.elbow,fixedSegments:this.state.currentItemArrowType===Je.elbow?[]:null}):ns({type:r,x:i,y:a,strokeColor:this.state.currentItemStrokeColor,backgroundColor:this.state.currentItemBackgroundColor,fillStyle:this.state.currentItemFillStyle,strokeWidth:this.state.currentItemStrokeWidth,strokeStyle:this.state.currentItemStrokeStyle,roughness:this.state.currentItemRoughness,opacity:this.state.currentItemOpacity,roundness:this.state.currentItemRoundness==="round"?{type:St.PROPORTIONAL_RADIUS}:null,locked:!1,frameId:l?l.id:null});this.setState(h=>{let f={...h.selectedElementIds};return delete f[p.id],{selectedElementIds:Ee(f,h)}}),P(p,{points:[...p.points,z(0,0)]});let u=Er(n.origin,this.scene.getNonDeletedElements(),this.scene.getNonDeletedElementsMap(),this.state.zoom,ee(p),ee(p));this.scene.insertElement(p),this.setState({newElement:p,startBoundElement:u,suggestedBindings:[]})}});C(this,"createGenericElementOnPointerDown",(t,r)=>{let[n,i]=nt(r.origin.x,r.origin.y,this.lastPointerDownEvent?.[y.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),a=this.getTopLayerFrameAtSceneCoords({x:n,y:i}),l={x:n,y:i,strokeColor:this.state.currentItemStrokeColor,backgroundColor:this.state.currentItemBackgroundColor,fillStyle:this.state.currentItemFillStyle,strokeWidth:this.state.currentItemStrokeWidth,strokeStyle:this.state.currentItemStrokeStyle,roughness:this.state.currentItemRoughness,opacity:this.state.currentItemOpacity,roundness:this.getCurrentItemRoundness(t),locked:!1,frameId:a?a.id:null},s;t==="embeddable"?s=km({type:"embeddable",...l}):s=ho({type:t,...l}),s.type==="selection"?this.setState({selectionElement:s}):(this.scene.insertElement(s),this.setState({multiElement:null,newElement:s}))});C(this,"createFrameElementOnPointerDown",(t,r)=>{let[n,i]=nt(t.origin.x,t.origin.y,this.lastPointerDownEvent?.[y.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),a={x:n,y:i,opacity:this.state.currentItemOpacity,locked:!1,...mo},l=r===kt.magicframe?ba(a):ri(a);this.scene.insertElement(l),this.setState({multiElement:null,newElement:l})});C(this,"restoreReadyToEraseElements",()=>{this.elementsPendingErasure=new Set,this.triggerRender()});C(this,"eraseElements",()=>{let t=!1,r=this.scene.getElementsIncludingDeleted().map(n=>this.elementsPendingErasure.has(n.id)||n.frameId&&this.elementsPendingErasure.has(n.frameId)||qe(n)&&this.elementsPendingErasure.has(n.containerId)?(t=!0,q(n,{isDeleted:!0})):n);this.elementsPendingErasure=new Set,t&&(this.store.shouldCaptureIncrement(),this.scene.replaceAllElements(r))});C(this,"initializeImage",async({imageFile:t,imageElement:r,showCursorImagePreview:n=!1})=>{if(!Es(t))throw new Error(g("errors.unsupportedFileType"));let i=t.type;if(Te(this.interactiveCanvas,"wait"),i===je.svg)try{t=Fm(Hm(await t.text()),t.name)}catch(m){throw console.warn(m),new Error(g("errors.svgImageInsertError"))}let a=await(this.props.generateIdForFile?.(t)||Mx(t));if(!a)throw console.warn("Couldn't generate file id or the supplied `generateIdForFile` didn't resolve to one."),new Error(g("errors.imageInsertError"));if(!this.files[a]?.dataURL){try{t=await wa(t,{maxWidthOrHeight:Lh})}catch(m){console.error("Error trying to resizing image file on insertion",m)}if(t.size>Zd)throw new Error(g("errors.fileTooBig",{maxSize:`${Math.trunc(Zd/1024/1024)}MB`}))}if(n){let m=this.files[a]?.dataURL,d=m&&Px(m);this.setImagePreviewCursor(d||t)}let s=this.files[a]?.dataURL||await vs(t),c=P(r,{fileId:a},!1);return new Promise(async(m,d)=>{try{this.addMissingFiles([{mimeType:i,id:a,dataURL:s,created:Date.now(),lastRetrieved:Date.now()}]);let p=this.imageCache.get(a);p||(this.addNewImagesToImageCache(),await this.updateImageCache([c])),p?.image instanceof Promise&&await p.image,this.state.pendingImageElementId!==c.id&&this.state.newElement?.id!==c.id&&this.initializeImageDimensions(c,!0),m(c)}catch(p){console.error(p),d(new Error(g("errors.imageInsertError")))}finally{n||Zt(this.interactiveCanvas)}})});C(this,"insertImageElement",async(t,r,n)=>{if(!this.isToolSupported("image")){this.setState({errorMessage:g("errors.imageToolNotSupported")});return}this.scene.insertElement(t);try{return await this.initializeImage({imageFile:r,imageElement:t,showCursorImagePreview:n})}catch(i){return P(t,{isDeleted:!0}),this.actionManager.executeAction(Ht),this.setState({errorMessage:i.message||g("errors.imageInsertError")}),null}});C(this,"setImagePreviewCursor",async t=>{let n;try{n=await wa(t,{maxWidthOrHeight:96})}catch(a){throw a.cause==="UNSUPPORTED"?new Error(g("errors.unsupportedFileType")):a}let i=await vs(n);if(t.type===je.svg){let a=await zx(i),l=Math.min(a.height,96),s=l*(a.width/a.height);s>96&&(s=96,l=s*(a.height/a.width));let c=document.createElement("canvas");c.height=l,c.width=s,c.getContext("2d").drawImage(a,0,0,s,l),i=c.toDataURL(je.svg)}this.state.pendingImageElementId&&Te(this.interactiveCanvas,`url(${i}) 4 4, auto`)});C(this,"onImageAction",async({insertOnCanvasDirectly:t})=>{try{let r=this.state.width/2+this.state.offsetLeft,n=this.state.height/2+this.state.offsetTop,{x:i,y:a}=Re({clientX:r,clientY:n},this.state),l=await bs({description:"Image",extensions:Object.keys(ra)}),s=this.createImageElement({sceneX:i,sceneY:a,addToFrameUnderCursor:!1});t?(this.insertImageElement(s,l),this.initializeImageDimensions(s),this.setState({selectedElementIds:Ee({[s.id]:!0},this.state)},()=>{this.actionManager.executeAction(Ht)})):this.setState({pendingImageElementId:s.id},()=>{this.insertImageElement(s,l,!0)})}catch(r){r.name!=="AbortError"?console.error(r):console.warn(r),this.setState({pendingImageElementId:null,newElement:null,activeTool:Be(this.state,{type:"selection"})},()=>{this.actionManager.executeAction(Ht)})}});C(this,"initializeImageDimensions",(t,r=!1)=>{let n=qr(t)&&this.imageCache.get(t.fileId)?.image;if(!n||n instanceof Promise){if(t.width<Vr/this.state.zoom.value&&t.height<Vr/this.state.zoom.value){let i=100/this.state.zoom.value;P(t,{x:t.x-i/2,y:t.y-i/2,width:i,height:i})}return}if(r||t.width<Vr/this.state.zoom.value&&t.height<Vr/this.state.zoom.value){let i=Math.max(this.state.height-120,160),a=Math.min(i,Math.floor(this.state.height*.5)/this.state.zoom.value),l=Math.min(n.naturalHeight,a),s=l*(n.naturalWidth/n.naturalHeight),c=t.x+t.width/2-s/2,m=t.y+t.height/2-l/2;P(t,{x:c,y:m,width:s,height:l,crop:null})}});C(this,"updateImageCache",async(t,r=this.files)=>{let{updatedFiles:n,erroredFiles:i}=await Ux({imageCache:this.imageCache,fileIds:t.map(a=>a.fileId),files:r});if(n.size||i.size)for(let a of t)n.has(a.fileId)&&fr.delete(a);return i.size&&this.scene.replaceAllElements(this.scene.getElementsIncludingDeleted().map(a=>qr(a)&&i.has(a.fileId)?q(a,{status:"error"}):a)),{updatedFiles:n,erroredFiles:i}});C(this,"addNewImagesToImageCache",async(t=Hx(this.scene.getNonDeletedElements()),r=this.files)=>{let n=t.filter(i=>!i.isDeleted&&!this.imageCache.has(i.fileId));if(n.length){let{updatedFiles:i}=await this.updateImageCache(n,r);i.size&&this.scene.triggerUpdate()}});C(this,"scheduleImageRefresh",eM(()=>{this.addNewImagesToImageCache()},xh));C(this,"updateBindingEnabledOnPointerMove",t=>{let r=bx(t);this.state.isBindingEnabled!==r&&this.setState({isBindingEnabled:r})});C(this,"maybeSuggestBindingAtCursor",(t,r)=>{let n=Er(t,this.scene.getNonDeletedElements(),this.scene.getNonDeletedElementsMap(),this.state.zoom,!1,r);this.setState({suggestedBindings:n!=null?[n]:[]})});C(this,"maybeSuggestBindingsForLinearElementAtCoords",(t,r,n)=>{if(!r.length)return;let i=r.reduce((a,l)=>{let s=Er(l,this.scene.getNonDeletedElements(),this.scene.getNonDeletedElementsMap(),this.state.zoom,ee(t),ee(t));return s!=null&&!yx(t,n?.id,s)&&a.push(s),a},[]);this.setState({suggestedBindings:i})});C(this,"handleInteractiveCanvasRef",t=>{t!==null?(this.interactiveCanvas=t,this.interactiveCanvas.addEventListener("touchstart",this.onTouchStart,{passive:!1}),this.interactiveCanvas.addEventListener("touchend",this.onTouchEnd)):(this.interactiveCanvas?.removeEventListener("touchstart",this.onTouchStart),this.interactiveCanvas?.removeEventListener("touchend",this.onTouchEnd))});C(this,"handleAppOnDrop",async t=>{let{file:r,fileHandle:n}=await Ox(t),{x:i,y:a}=Re(t,this.state);try{if(Es(r)&&this.isToolSupported("image")){if(r?.type===je.png||r?.type===je.svg)try{let c=await ys(r,this.state,this.scene.getElementsIncludingDeleted(),n);this.syncActionResult({...c,appState:{...c.appState||this.state,isLoading:!1},replaceFiles:!0,captureUpdate:L.IMMEDIATELY});return}catch(c){if(c.name!=="EncodingError")throw new Error(g("alerts.couldNotLoadInvalidFile"))}let s=this.createImageElement({sceneX:i,sceneY:a});this.insertImageElement(s,r),this.initializeImageDimensions(s),this.setState({selectedElementIds:Ee({[s.id]:!0},this.state)});return}}catch(s){return this.setState({isLoading:!1,errorMessage:s.message})}let l=t.dataTransfer.getData(je.excalidrawlib);if(l&&typeof l=="string"){try{let s=_x(l);this.addElementsFromPasteOrLibrary({elements:_c(s),position:t,files:null})}catch(s){this.setState({errorMessage:s.message})}return}if(r&&await this.loadFileToCanvas(r,n),t.dataTransfer?.types?.includes("text/plain")){let s=t.dataTransfer?.getData("text");if(s&&li(s,this.props.validateEmbeddable)&&(/^(http|https):\/\/[^\s/$.?#].[^\s]*$/.test(s)||dn(s)?.type==="video")){let c=this.insertEmbeddableElement({sceneX:i,sceneY:a,link:uo(s)});c&&this.setState({selectedElementIds:{[c.id]:!0}})}}});C(this,"loadFileToCanvas",async(t,r)=>{t=await Fx(t);try{let n=this.scene.getElementsIncludingDeleted(),i;try{i=await Nm(t,this.state,n,r)}catch(a){let l=a instanceof tf;if(l&&a.code==="IMAGE_NOT_CONTAINS_SCENE_DATA"&&!this.isToolSupported("image")){this.setState({isLoading:!1,errorMessage:g("errors.imageToolNotSupported")});return}let s=l?g("alerts.cannotRestoreFromImage"):g("alerts.couldNotLoadInvalidFile");this.setState({isLoading:!1,errorMessage:s})}if(!i)return;i.type===je.excalidraw?(Jo(n.concat(i.data.elements)),this.store.updateSnapshot(Q(n),this.state),this.setState({isLoading:!0}),this.syncActionResult({...i.data,appState:{...i.data.appState||this.state,isLoading:!1},replaceFiles:!0,captureUpdate:L.IMMEDIATELY})):i.type===je.excalidrawlib&&await this.library.updateLibrary({libraryItems:t,merge:!0,openLibraryMenu:!0}).catch(a=>{console.error(a),this.setState({errorMessage:g("errors.importLibraryError")})})}catch(n){this.setState({isLoading:!1,errorMessage:n.message})}});C(this,"handleCanvasContextMenu",t=>{if(t.preventDefault(),("pointerType"in t.nativeEvent&&t.nativeEvent.pointerType==="touch"||"pointerType"in t.nativeEvent&&t.nativeEvent.pointerType==="pen"&&t.button!==To.SECONDARY)&&this.state.activeTool.type!=="selection")return;let{x:r,y:n}=Re(t,this.state),i=this.getElementAtPosition(r,n,{preferSelected:!0,includeLockedElements:!0}),a=this.scene.getSelectedElements(this.state),l=this.isHittingCommonBoundingBoxOfSelectedElements({x:r,y:n},a),s=i||l?"element":"canvas",c=this.excalidrawContainerRef.current,{top:m,left:d}=c.getBoundingClientRect(),p=t.clientX-d,u=t.clientY-m;le("contextMenu","openContextMenu",s),this.setState({...i&&!this.state.selectedElementIds[i.id]?{...this.state,...We({editingGroupId:this.state.editingGroupId,selectedElementIds:{[i.id]:!0}},this.scene.getNonDeletedElements(),this.state,this),selectedLinearElement:he(i)?new K(i):null}:this.state,showHyperlinkPopup:!1},()=>{this.setState({contextMenu:{top:u,left:p,items:this.getContextMenuItems(s)}})})});C(this,"maybeDragNewGenericElement",(t,r,n=!0)=>{let i=this.state.selectionElement,a=t.lastCoords;if(i&&this.state.activeTool.type!=="eraser"){ip({newElement:i,elementType:this.state.activeTool.type,originX:t.origin.x,originY:t.origin.y,x:a.x,y:a.y,width:jr(t.origin.x,a.x),height:jr(t.origin.y,a.y),shouldMaintainAspectRatio:ii(r),shouldResizeFromCenter:cs(r),zoom:this.state.zoom.value,informMutation:n});return}let l=this.state.newElement;if(!l)return;let[s,c]=nt(a.x,a.y,r[y.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),m=qr(l)&&this.imageCache.get(l.fileId)?.image,d=m&&!(m instanceof Promise)?m.width/m.height:null;this.maybeCacheReferenceSnapPoints(r,[l]);let{snapOffset:p,snapLines:u}=gE(l,this,r,{x:t.originInGrid.x+(this.state.originSnapOffset?.x??0),y:t.originInGrid.y+(this.state.originSnapOffset?.y??0)},{x:s-t.originInGrid.x,y:c-t.originInGrid.y},this.scene.getNonDeletedElementsMap());s+=p.x,c+=p.y,this.setState({snapLines:u}),ip({newElement:l,elementType:this.state.activeTool.type,originX:t.originInGrid.x,originY:t.originInGrid.y,x:s,y:c,width:jr(t.originInGrid.x,s),height:jr(t.originInGrid.y,c),shouldMaintainAspectRatio:xe(l)?!ii(r):ii(r),shouldResizeFromCenter:cs(r),zoom:this.state.zoom.value,widthAspectRatio:d,originOffset:this.state.originSnapOffset,informMutation:n}),this.setState({newElement:l}),(this.state.activeTool.type===kt.frame||this.state.activeTool.type===kt.magicframe)&&this.setState({elementsToHighlight:di(this.scene.getNonDeletedElements(),l,this.state,this.scene.getNonDeletedElementsMap())})});C(this,"maybeHandleCrop",(t,r)=>{if(!this.state.croppingElementId)return!1;let n=t.resize.handleType,i=t.lastCoords,[a,l]=nt(i.x-t.resize.offset.x,i.y-t.resize.offset.y,r[y.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),s=this.scene.getNonDeletedElementsMap().get(this.state.croppingElementId);if(n&&s&&xe(s)){let c=t.originalElements.get(s.id),m=qr(s)&&this.imageCache.get(s.fileId)?.image;if(c&&xe(c)&&m&&!(m instanceof Promise)){let[d,p]=nt(i.x,i.y,r[y.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),u={x:d-t.originInGrid.x,y:p-t.originInGrid.y};this.maybeCacheReferenceSnapPoints(r,[s]);let{snapOffset:h,snapLines:f}=Jm([s],[c],this,r,u,n);P(s,Cx(s,n,m.naturalWidth,m.naturalHeight,a+h.x,l+h.y,r.shiftKey?c.width/c.height:void 0)),Jt(s,this.scene.getNonDeletedElementsMap(),{newSize:{width:s.width,height:s.height}}),this.setState({isCropping:n&&n!=="rotation",snapLines:f})}return!0}return!1});C(this,"maybeHandleResize",(t,r)=>{let n=this.scene.getSelectedElements(this.state),i=n.filter(d=>ie(d)),a=t.resize.handleType;if(i.length>0&&a==="rotation"||n.length===1&&ee(n[0])||this.state.croppingElementId)return!1;this.setState({isResizing:a&&a!=="rotation",isRotating:a==="rotation",activeEmbeddable:null});let l=t.lastCoords,[s,c]=nt(l.x-t.resize.offset.x,l.y-t.resize.offset.y,r[y.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),m=new Map;if(i.forEach(d=>{ko(this.scene.getNonDeletedElements(),d.id).forEach(u=>{m.set(d.id+u.id,{x:u.x-d.x,y:u.y-d.y})})}),!this.state.selectedElementsAreBeingDragged){let[d,p]=nt(l.x,l.y,r[y.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),u={x:d-t.originInGrid.x,y:p-t.originInGrid.y},h=[...t.originalElements.values()];this.maybeCacheReferenceSnapPoints(r,n);let{snapOffset:f,snapLines:b}=Jm(n,$(h,this.state),this,r,u,a);s+=f.x,c+=f.y,this.setState({snapLines:b})}if(DE(t.originalElements,a,n,this.scene.getElementsMapIncludingDeleted(),this.scene,ds(r),cs(r),n.some(d=>xe(d))?!ii(r):ii(r),s,c,t.resize.center.x,t.resize.center.y)){let d=gs(n,this.scene.getNonDeletedElementsMap(),this.state.zoom),p=new Set;return i.forEach(u=>{di(this.scene.getNonDeletedElements(),u,this.state,this.scene.getNonDeletedElementsMap()).forEach(h=>p.add(h))}),this.setState({elementsToHighlight:[...p],suggestedBindings:d}),!0}return!1});C(this,"getContextMenuItems",t=>{let r=[];return r.push(wc,vc),t==="canvas"?this.state.viewModeEnabled?[...r,Cc,Mi,wg,Di]:[Qp,$e,wc,vc,Tc,$e,bp,Cv,$e,Cc,eu,Mi,wg,Di]:(r.push(Tc),this.state.viewModeEnabled?[_i,...r]:[$e,yc,_i,Qp,$e,N1,O1,F1,$e,Du,$e,...r,$e,Wp,Kp,$e,Xp,aT,tu,ou,fv,$p,$e,jp,$e,up,gp,hp,fp,$e,Jp,qp,$e,Mu,$e,Ga,Vc,$e,xp,cu,$e,_a])});C(this,"handleWheel",Fe(t=>{if(!(t.target instanceof HTMLCanvasElement||t.target instanceof HTMLTextAreaElement||t.target instanceof HTMLIFrameElement)){t[y.CTRL_OR_CMD]&&t.preventDefault();return}if(t.preventDefault(),ll)return;let{deltaX:r,deltaY:n}=t;if(t.metaKey||t.ctrlKey){let i=Math.sign(n),a=Fn*100,l=Math.abs(n),s=n;l>a&&(s=a*i);let c=this.state.zoom.value-s/100;c+=Math.log10(Math.max(1,this.state.zoom.value))*-i*Math.min(1,l/20),this.translateCanvas(m=>({...Qo({viewportX:this.lastViewportPosition.x,viewportY:this.lastViewportPosition.y,nextZoom:Ao(c)},m),shouldCacheIgnoreZoom:!0})),this.resetShouldCacheIgnoreZoomDebounced();return}if(t.shiftKey){this.translateCanvas(({zoom:i,scrollX:a})=>({scrollX:a-(n||r)/i.value}));return}this.translateCanvas(({zoom:i,scrollX:a,scrollY:l})=>({scrollX:a-r/i.value,scrollY:l-n/i.value}))}));C(this,"savePointer",(t,r,n)=>{if(!t||!r)return;let{x:i,y:a}=Re({clientX:t,clientY:r},this.state);isNaN(i)||isNaN(a);let l={x:i,y:a,tool:this.state.activeTool.type==="laser"?"laser":"pointer"};this.props.onPointerUpdate?.({pointer:l,button:n,pointersMap:fe.pointers})});C(this,"resetShouldCacheIgnoreZoomDebounced",$r(()=>{this.unmounted||this.setState({shouldCacheIgnoreZoom:!1})},300));C(this,"updateDOMRect",t=>{if(this.excalidrawContainerRef?.current){let r=this.excalidrawContainerRef.current,{width:n,height:i,left:a,top:l}=r.getBoundingClientRect(),{width:s,height:c,offsetTop:m,offsetLeft:d}=this.state;if(n===s&&i===c&&a===d&&l===m){t&&t();return}this.setState({width:n,height:i,offsetLeft:a,offsetTop:l},()=>{t&&t()})}});C(this,"refresh",()=>{this.setState({...this.getCanvasOffsets()})});let r=$n(),{excalidrawAPI:n,viewModeEnabled:i=!1,zenModeEnabled:a=!1,gridModeEnabled:l=!1,objectsSnapModeEnabled:s=!1,theme:c=r.theme,name:m=`${g("labels.untitled")}-${om()}`}=t;if(this.state={...r,theme:c,isLoading:!0,...this.getCanvasOffsets(),viewModeEnabled:i,zenModeEnabled:a,objectsSnapModeEnabled:s,gridModeEnabled:l??r.gridModeEnabled,name:m,width:window.innerWidth,height:window.innerHeight},this.id=Q5(),this.library=new Ov(this),this.actionManager=new $c(this.syncActionResult,()=>this.state,()=>this.scene.getElementsIncludingDeleted(),this),this.scene=new bo,this.canvas=document.createElement("canvas"),this.rc=q5.canvas(this.canvas),this.renderer=new il(this.scene),this.visibleElements=[],this.store=new wx,this.history=new Xa,n){let d={updateScene:this.updateScene,updateLibrary:this.library.updateLibrary,addFiles:this.addFiles,resetScene:this.resetScene,getSceneElementsIncludingDeleted:this.getSceneElementsIncludingDeleted,history:{clear:this.resetHistory},scrollToContent:this.scrollToContent,getSceneElements:this.getSceneElements,getAppState:()=>this.state,getFiles:()=>this.files,getName:this.getName,registerAction:p=>{this.actionManager.registerAction(p)},refresh:this.refresh,setToast:this.setToast,id:this.id,setActiveTool:this.setActiveTool,setCursor:this.setCursor,resetCursor:this.resetCursor,updateFrameRendering:this.updateFrameRendering,toggleSidebar:this.toggleSidebar,onChange:p=>this.onChangeEmitter.on(p),onPointerDown:p=>this.onPointerDownEmitter.on(p),onPointerUp:p=>this.onPointerUpEmitter.on(p),onScrollChange:p=>this.onScrollChangeEmitter.on(p),onUserFollow:p=>this.onUserFollowEmitter.on(p)};typeof n=="function"?n(d):console.error("excalidrawAPI should be a function!")}this.excalidrawContainerValue={container:this.excalidrawContainerRef.current,id:this.id},this.fonts=new br(this.scene),this.history=new Xa,this.actionManager.registerAll(bf),this.actionManager.registerAction(Aw(this.history,this.store)),this.actionManager.registerAction(_w(this.history,this.store))}onWindowMessage(t){if(t.origin!=="https://player.vimeo.com"&&t.origin!=="https://www.youtube.com")return;let r=null;try{r=JSON.parse(t.data)}catch{}if(r)switch(t.origin){case"https://player.vimeo.com":if(r.method==="paused"){let n=null,i=document.body.querySelectorAll("iframe.excalidraw__embeddable");if(!i)break;for(let a of i)a.contentWindow===t.source&&(n=a.contentWindow);n?.postMessage(JSON.stringify({method:r.value?"play":"pause",value:!0}),"*")}break;case"https://www.youtube.com":if(r.event==="infoDelivery"&&r.info&&r.id&&typeof r.info.playerState=="number"){let n=r.id,i=r.info.playerState;Object.values(ta).includes(i)&&Rg.set(n,i)}break}}cacheEmbeddableRef(t,r){r&&this.iFrameRefs.set(t.id,r)}getHTMLIFrameElement(t){return this.iFrameRefs.get(t.id)}handleEmbeddableCenterClick(t){if(this.state.activeEmbeddable?.element===t&&this.state.activeEmbeddable?.state==="active"||(setTimeout(()=>{this.setState({activeEmbeddable:{element:t,state:"active"},selectedElementIds:{[t.id]:!0},newElement:null,selectionElement:null})},100),Qr(t)))return;let r=this.getHTMLIFrameElement(t);if(r?.contentWindow){if(r.src.includes("youtube")){let n=Rg.get(t.id);switch(n||(Rg.set(t.id,ta.UNSTARTED),r.contentWindow.postMessage(JSON.stringify({event:"listening",id:t.id}),"*")),n){case ta.PLAYING:case ta.BUFFERING:r.contentWindow?.postMessage(JSON.stringify({event:"command",func:"pauseVideo",args:""}),"*");break;default:r.contentWindow?.postMessage(JSON.stringify({event:"command",func:"playVideo",args:""}),"*")}}r.src.includes("player.vimeo.com")&&r.contentWindow.postMessage(JSON.stringify({method:"paused"}),"*")}}isIframeLikeElementCenter(t,r,n,i){return t&&!r.altKey&&!r.shiftKey&&!r.metaKey&&!r.ctrlKey&&(this.state.activeEmbeddable?.element!==t||this.state.activeEmbeddable?.state==="hover"||!this.state.activeEmbeddable)&&n>=t.x+t.width/3&&n<=t.x+2*t.width/3&&i>=t.y+t.height/3&&i<=t.y+2*t.height/3}renderEmbeddables(){let t=this.state.zoom.value,r=this.state.width,n=this.state.height,i=this.scene.getNonDeletedElements().filter(a=>Et(a)&&this.embedsValidationStatus.get(a.id)===!0||Qr(a));return Ie(oM,{children:i.map(a=>{let{x:l,y:s}=xt({sceneX:a.x,sceneY:a.y},this.state),c=ka(a,r,n,this.state,this.scene.getNonDeletedElementsMap()),m=this.initializedEmbeds.has(a.id);if(c&&!m&&this.initializedEmbeds.add(a.id),!(c||m))return null;let p;if(Qr(a)){p=null;let f=(a.customData?.generationData??this.magicGenerations.get(a.id))||{status:"error",message:"No generation data",code:"ERR_NO_GENERATION_DATA"};if(f.status==="done"){let b=f.html;p={intrinsicSize:{w:a.width,h:a.height},type:"document",srcdoc:()=>b}}else if(f.status==="pending")p={intrinsicSize:{w:a.width,h:a.height},type:"document",srcdoc:()=>_m(`
+`).reduce((ne,ge,be,mt)=>ne.concat(be?ne[be-1]+mt[be-1].length+1:F),[]).reverse()},w=F=>{F.target instanceof HTMLCanvasElement&&(F.preventDefault(),F.stopPropagation())},S=!1,I=()=>{if(H)return;H=!0,_();let F=bo.getScene(n)?.getElement(n.id);if(!F)return;let O=Qt(F,l.scene.getNonDeletedElementsMap());if(O){if(d.value.trim()){let j=vE(O);!j||j!==n.id?P(O,{boundElements:(O.boundElements||[]).concat({type:"text",id:n.id})}):Ne(O)&&ep(O)}else P(O,{boundElements:O.boundElements?.filter(j=>!Y(j))});Ue(F,O,l.scene.getNonDeletedElementsMap())}t({viaKeyboard:S,nextOriginalText:d.value})},_=()=>{d.onblur=null,d.oninput=null,d.onkeydown=null,V&&V.disconnect(),window.removeEventListener("resize",m),window.removeEventListener("wheel",w,!0),window.removeEventListener("pointerdown",M),window.removeEventListener("pointerup",k),window.removeEventListener("blur",I),window.removeEventListener("beforeunload",I),N(),G(),d.remove()},k=F=>{window.removeEventListener("pointerup",k);let O=F?.target,j=O instanceof HTMLElement&&O.classList.contains("properties-trigger");setTimeout(()=>{d.onblur=I,j||d.focus()})},R=()=>{d.onblur=null,window.addEventListener("pointerup",k),window.addEventListener("blur",I)},M=F=>{let O=F?.target;if(F.button===To.WHEEL){O instanceof HTMLTextAreaElement&&(F.preventDefault(),l.handleCanvasPanUsingWheelOrSpaceDrag(F)),R();return}let j=O instanceof HTMLElement&&O.classList.contains("properties-trigger");(F.target instanceof HTMLElement||F.target instanceof SVGElement)&&F.target.closest(`.${co.SHAPE_ACTIONS_MENU}, .${co.ZOOM_ACTIONS}`)&&!Co(F.target)||j?R():F.target instanceof HTMLCanvasElement&&!sa()&&requestAnimationFrame(()=>{I()})},N=l.scene.onUpdate(()=>{m(),!!document.activeElement?.closest(".properties-content")||d.focus()}),G=l.onScrollChangeEmitter.on(()=>{m()}),H=!1;s&&d.select(),k();let V=null;i&&"ResizeObserver"in window?(V=new window.ResizeObserver(()=>{m()}),V.observe(i)):window.addEventListener("resize",m),d.onpointerdown=F=>F.stopPropagation(),requestAnimationFrame(()=>{window.addEventListener("pointerdown",M,{capture:!0})}),window.addEventListener("beforeunload",I),a?.querySelector(".excalidraw-textEditorContainer").appendChild(d)};var aT=D({name:"autoResize",label:"labels.autoResize",icon:null,trackEvent:{category:"element"},predicate:(e,o,t,r)=>{let n=$(e,o);return n.length===1&&Y(n[0])&&!n[0].autoResize},perform:(e,o,t,r)=>{let n=$(e,o);return{appState:o,elements:e.map(i=>{if(i.id===n[0].id&&Y(i)){let a=Nt(i.originalText,lt(i),i.lineHeight);return q(i,{autoResize:!0,width:a.width,height:a.height,text:i.originalText})}return i}),captureUpdate:L.IMMEDIATELY}}});var lT=e=>{let o=["flowchart","graph","sequenceDiagram","classDiagram","stateDiagram","stateDiagram-v2","erDiagram","journey","gantt","pie","quadrantChart","requirementDiagram","gitGraph","C4Context","mindmap","timeline","zenuml","sankey","xychart","block"];return new RegExp(`^(?:%%{.*?}%%[\\s\\n]*)?\\b(?:${o.map(r=>`\\s*${r}(-beta)?`).join("|")})\\b`).test(e.trim())};import{useEffect as $5,useRef as Z5}from"react";var sT=({canvas:e,rc:o,newElement:t,elementsMap:r,allElementsMap:n,scale:i,appState:a,renderConfig:l})=>{if(e){let[s,c]=Cs(e,i),m=Is({canvas:e,scale:i,normalizedWidth:s,normalizedHeight:c});m.save(),m.scale(a.zoom.value,a.zoom.value),t&&t.type!=="selection"?dE(t,r,n,o,m,l,a):m.clearRect(0,0,s,c)}},X5=Un(e=>{sT(e)},{trailing:!0}),cT=(e,o)=>{if(o){X5(e);return}sT(e)};import{jsx as J5}from"react/jsx-runtime";var j5=e=>{let o=Z5(null);return $5(()=>{o.current&&cT({canvas:o.current,scale:e.scale,newElement:e.appState.newElement,elementsMap:e.elementsMap,allElementsMap:e.allElementsMap,rc:e.rc,renderConfig:e.renderConfig,appState:e.appState},ji())}),J5("canvas",{className:"excalidraw__canvas",style:{width:e.appState.width,height:e.appState.height},width:e.appState.width*e.scale,height:e.appState.height*e.scale,ref:o})},dT=j5;import{Fragment as oM,jsx as Ie,jsxs as Nd}from"react/jsx-runtime";var gT=Uo.createContext(null),hT=Uo.createContext(null),fT={viewport:{isMobile:!1,isLandscape:!1},editor:{isMobile:!1,canFitSidebar:!1},isTouchScreen:!1},Og=Uo.createContext(fT);Og.displayName="DeviceContext";var Fg=Uo.createContext({container:null,id:null});Fg.displayName="ExcalidrawContainerContext";var Bg=Uo.createContext([]);Bg.displayName="ExcalidrawElementsContext";var zg=Uo.createContext({...$n(),width:0,height:0,offsetLeft:0,offsetTop:0});zg.displayName="ExcalidrawAppStateContext";var Ug=Uo.createContext(()=>{console.warn("Uninitialized ExcalidrawSetAppStateContext context!")});Ug.displayName="ExcalidrawSetAppStateContext";var Hg=Uo.createContext(null);Hg.displayName="ExcalidrawActionManagerContext";var He=()=>Hr(gT),Do=()=>Hr(hT),me=()=>Hr(Og),Ke=()=>Hr(Fg),kr=()=>Hr(Bg),Mo=()=>Hr(zg),pe=()=>Hr(Ug),Xe=()=>Hr(Hg),al=!1,Mg=0,Mn=!1,ll=!1,Dg=!1,Pg={horizontal:null,vertical:null},Ur=0,sl=!1,Rg=new Map,Rd=!1,pT=0,uT=!1,cl=null,fe={pointers:new Map,lastCenter:null,initialDistance:null,initialScale:null},Ng=class e extends Uo.Component{constructor(t){super(t);C(this,"canvas");C(this,"interactiveCanvas",null);C(this,"rc");C(this,"unmounted",!1);C(this,"actionManager");C(this,"device",fT);C(this,"excalidrawContainerRef",Uo.createRef());C(this,"scene");C(this,"fonts");C(this,"renderer");C(this,"visibleElements");C(this,"resizeObserver");C(this,"nearestScrollableContainer");C(this,"library");C(this,"libraryItemsFromStorage");C(this,"id");C(this,"store");C(this,"history");C(this,"excalidrawContainerValue");C(this,"files",{});C(this,"imageCache",new Map);C(this,"iFrameRefs",new Map);C(this,"embedsValidationStatus",new Map);C(this,"initializedEmbeds",new Set);C(this,"elementsPendingErasure",new Set);C(this,"flowChartCreator",new Qc);C(this,"flowChartNavigator",new qc);C(this,"hitLinkElement");C(this,"lastPointerDownEvent",null);C(this,"lastPointerUpEvent",null);C(this,"lastPointerMoveEvent",null);C(this,"lastPointerMoveCoords",null);C(this,"lastViewportPosition",{x:0,y:0});C(this,"animationFrameHandler",new Dd);C(this,"laserTrails",new Pd(this.animationFrameHandler,this));C(this,"eraserTrail",new An(this.animationFrameHandler,this,{streamline:.2,size:5,keepHead:!0,sizeMapping:t=>{let i=Math.max(0,1-(performance.now()-t.pressure)/200),a=(10-Math.min(10,t.totalLength-t.currentIndex))/10;return Math.min(Zr(a),Zr(i))},fill:()=>this.state.theme===re.LIGHT?"rgba(0, 0, 0, 0.2)":"rgba(255, 255, 255, 0.2)"}));C(this,"onChangeEmitter",new qt);C(this,"onPointerDownEmitter",new qt);C(this,"onPointerUpEmitter",new qt);C(this,"onUserFollowEmitter",new qt);C(this,"onScrollChangeEmitter",new qt);C(this,"missingPointerEventCleanupEmitter",new qt);C(this,"onRemoveEventListenersEmitter",new qt);C(this,"getEffectiveGridSize",()=>gn(this)?this.state.gridSize:null);C(this,"updateEmbedValidationStatus",(t,r)=>{this.embedsValidationStatus.set(t.id,r),fr.delete(t)});C(this,"updateEmbeddables",()=>{let t=new Set,r=!1;this.scene.getNonDeletedElements().filter(n=>{if(Et(n)){if(t.add(n.id),!this.embedsValidationStatus.has(n.id)){r=!0;let i=this.props.renderEmbeddable?.(n,this.state)!=null||li(n.link,this.props.validateEmbeddable);this.updateEmbedValidationStatus(n,i)}}else Qr(n)&&t.add(n.id);return!1}),r&&this.scene.triggerUpdate(),this.iFrameRefs.forEach((n,i)=>{t.has(i)||this.iFrameRefs.delete(i)})});C(this,"getFrameNameDOMId",t=>`${this.id}-frame-name-${t.id}`);C(this,"frameNameBoundsCache",{get:t=>{let r=this.frameNameBoundsCache._cache.get(t.id);if(!r||r.zoom!==this.state.zoom.value||r.versionNonce!==t.versionNonce){let n=document.getElementById(this.getFrameNameDOMId(t));if(n){let i=n.getBoundingClientRect(),a=Re({clientX:i.x,clientY:i.y},this.state),l=Re({clientX:i.right,clientY:i.bottom},this.state);return r={x:a.x,y:a.y,width:l.x-a.x,height:l.y-a.y,angle:0,zoom:this.state.zoom.value,versionNonce:t.versionNonce},this.frameNameBoundsCache._cache.set(t.id,r),r}return null}return r},_cache:new Map});C(this,"resetEditingFrame",t=>{t&&P(t,{name:t.name?.trim()||null}),this.setState({editingFrame:null})});C(this,"renderFrameNames",()=>{if(!this.state.frameRendering.enabled||!this.state.frameRendering.name)return this.state.editingFrame&&this.resetEditingFrame(null),null;let t=this.state.theme===re.DARK;return this.scene.getNonDeletedFramesLikes().map(r=>{if(!ka(r,this.canvas.width/window.devicePixelRatio,this.canvas.height/window.devicePixelRatio,{offsetLeft:this.state.offsetLeft,offsetTop:this.state.offsetTop,scrollX:this.state.scrollX,scrollY:this.state.scrollY,zoom:this.state.zoom},this.scene.getNonDeletedElementsMap()))return this.state.editingFrame===r.id&&this.resetEditingFrame(r),null;let{x:n,y:i}=xt({sceneX:r.x,sceneY:r.y},this.state),a=6,l,s=lE(r);if(r.id===this.state.editingFrame){let c=s;l=Ie("input",{autoFocus:!0,value:c,onChange:m=>{P(r,{name:m.target.value})},onFocus:m=>m.target.select(),onBlur:()=>this.resetEditingFrame(r),onKeyDown:m=>{(m.key===y.ESCAPE||m.key===y.ENTER)&&this.resetEditingFrame(r)},style:{background:this.state.viewBackgroundColor,filter:t?Th:"none",zIndex:2,border:"none",display:"block",padding:`${a}px`,borderRadius:4,boxShadow:"inset 0 0 0 1px var(--color-primary)",fontFamily:"Assistant",fontSize:"14px",transform:`translate(-${a}px, ${a}px)`,color:"var(--color-gray-80)",overflow:"hidden",maxWidth:`${document.body.clientWidth-n-a}px`},size:c.length+1||1,dir:"auto",autoComplete:"off",autoCapitalize:"off",autoCorrect:"off"})}else l=s;return Ie("div",{id:this.getFrameNameDOMId(r),style:{position:"absolute",bottom:`${this.state.height+mo.nameOffsetY-i+this.state.offsetTop}px`,left:`${n-this.state.offsetLeft}px`,zIndex:2,fontSize:mo.nameFontSize,color:t?mo.nameColorDarkTheme:mo.nameColorLightTheme,lineHeight:mo.nameLineHeight,width:"max-content",maxWidth:`${r.width}px`,overflow:r.id===this.state.editingFrame?"visible":"hidden",whiteSpace:"nowrap",textOverflow:"ellipsis",cursor:we.MOVE,pointerEvents:this.state.viewModeEnabled?Wr.disabled:Wr.enabled},onPointerDown:c=>this.handleCanvasPointerDown(c),onWheel:c=>this.handleWheel(c),onContextMenu:this.handleCanvasContextMenu,onDoubleClick:()=>{this.setState({editingFrame:r.id})},children:l},r.id)})});C(this,"focusContainer",()=>{this.excalidrawContainerRef.current?.focus()});C(this,"getSceneElementsIncludingDeleted",()=>this.scene.getElementsIncludingDeleted());C(this,"getSceneElements",()=>this.scene.getNonDeletedElements());C(this,"onInsertElements",t=>{this.addElementsFromPasteOrLibrary({elements:t,position:"center",files:null})});C(this,"onExportImage",async(t,r,n)=>{le("export",t,"ui");let i=await vn(t,r,this.state,this.files,{exportBackground:this.state.exportBackground,name:this.getName(),viewBackgroundColor:this.state.viewBackgroundColor,exportingFrame:n.exportingFrame}).catch(_l).catch(a=>{console.error(a),this.setState({errorMessage:a.message})});this.state.exportEmbedScene&&i&&xs(i)&&this.setState({fileHandle:i})});C(this,"magicGenerations",new Map);C(this,"updateMagicGeneration",({frameElement:t,data:r})=>{r.status==="pending"?P(t,{customData:{generationData:void 0}},!1):P(t,{customData:{generationData:r}},!1),this.magicGenerations.set(t.id,r),this.triggerRender()});C(this,"plugins",{});C(this,"onMagicframeToolSelect",()=>{let t=this.scene.getSelectedElements({selectedElementIds:this.state.selectedElementIds});if(t.length===0)this.setActiveTool({type:kt.magicframe}),le("ai","tool-select (empty-selection)","d2c");else{let r=t.length===1&&Nl(t[0])&&t[0];if(!r&&t.some(i=>ie(i)||i.frameId)){this.setActiveTool({type:kt.magicframe});return}le("ai","tool-select (existing selection)","d2c");let n;if(r)n=r;else{let[i,a,l,s]=Se(t),c=50;n=ba({...mo,x:i-c,y:a-c,width:l-i+c*2,height:s-a+c*2,opacity:100,locked:!1}),this.scene.insertElement(n);for(let m of t)P(m,{frameId:n.id});this.setState({selectedElementIds:{[n.id]:!0}})}this.onMagicFrameGenerate(n,"upstream")}});C(this,"openEyeDropper",({type:t})=>{st.set(Sr,{swapPreviewOnAlt:!0,colorPickerType:t==="stroke"?"elementStroke":"elementBackground",onSelect:(r,n)=>{let i=t==="background"&&n.altKey||t==="stroke"&&!n.altKey;!this.scene.getSelectedElements(this.state).length||this.state.activeTool.type!=="selection"?i?this.syncActionResult({appState:{...this.state,currentItemStrokeColor:r},captureUpdate:L.IMMEDIATELY}):this.syncActionResult({appState:{...this.state,currentItemBackgroundColor:r},captureUpdate:L.IMMEDIATELY}):this.updateScene({elements:this.scene.getElementsIncludingDeleted().map(l=>this.state.selectedElementIds[l.id]?q(l,{[i?"strokeColor":"backgroundColor"]:r}):l),captureUpdate:L.IMMEDIATELY})},keepOpenOnAlt:!1})});C(this,"dismissLinearEditor",()=>{setTimeout(()=>{this.setState({editingLinearElement:null})})});C(this,"syncActionResult",Fe(t=>{if(this.unmounted||t===!1)return;t.captureUpdate===L.NEVER?this.store.shouldUpdateSnapshot():t.captureUpdate===L.IMMEDIATELY&&this.store.shouldCaptureIncrement();let r=!1,n=null;if(t.elements&&(this.scene.replaceAllElements(t.elements),r=!0),t.files&&(this.addMissingFiles(t.files,t.replaceFiles),this.addNewImagesToImageCache()),t.appState||n||this.state.contextMenu){let i=t?.appState?.viewModeEnabled||!1,a=t?.appState?.zenModeEnabled||!1,l=t?.appState?.theme||this.props.theme||re.LIGHT,s=t?.appState?.name??this.state.name,c=t?.appState?.errorMessage??this.state.errorMessage;typeof this.props.viewModeEnabled<"u"&&(i=this.props.viewModeEnabled),typeof this.props.zenModeEnabled<"u"&&(a=this.props.zenModeEnabled),n=t.appState?.editingTextElement||null,t.elements&&n&&t.elements.forEach(m=>{n?.id===m.id&&n!==m&&sp(m)&&Y(m)&&(n=m)}),n?.isDeleted&&(n=null),this.setState(m=>{let d=t.appState||{};return{...m,...d,contextMenu:null,editingTextElement:n,viewModeEnabled:i,zenModeEnabled:a,theme:l,name:s,errorMessage:c}}),r=!0}!r&&t.captureUpdate!==L.EVENTUALLY&&this.scene.triggerUpdate()}));C(this,"onBlur",Fe(()=>{Mn=!1,this.setState({isBindingEnabled:!0})}));C(this,"onUnload",()=>{this.onBlur()});C(this,"disableEvent",t=>{t.preventDefault()});C(this,"resetHistory",()=>{this.history.clear()});C(this,"resetStore",()=>{this.store.clear()});C(this,"resetScene",Fe(t=>{this.scene.replaceAllElements([]),this.setState(r=>({...$n(),isLoading:t?.resetLoadingState?!1:r.isLoading,theme:this.state.theme})),this.resetStore(),this.resetHistory()}));C(this,"initializeScene",async()=>{"launchQueue"in window&&"LaunchParams"in window&&window.launchQueue.setConsumer(async n=>{if(!n.files.length)return;let i=n.files[0],a=await i.getFile();this.loadFileToCanvas(new File([a],a.name||"",{type:a.type}),i)}),this.props.theme&&this.setState({theme:this.props.theme}),this.state.isLoading||this.setState({isLoading:!0});let t=null;try{typeof this.props.initialData=="function"?t=await this.props.initialData()||null:t=await this.props.initialData||null,t?.libraryItems&&this.library.updateLibrary({libraryItems:t.libraryItems,merge:!0}).catch(n=>{console.error(n)})}catch(n){console.error(n),t={appState:{errorMessage:n.message||"Encountered an error during importing or restoring scene data"}}}let r=Rm(t,null,null,{repairBindings:!0});r.appState={...r.appState,theme:this.props.theme||r.appState.theme,openSidebar:r.appState?.openSidebar||this.state.openSidebar,activeTool:r.appState.activeTool.type==="image"?{...r.appState.activeTool,type:"selection"}:r.appState.activeTool,isLoading:!1,toast:this.state.toast},t?.scrollToContent&&(r.appState={...r.appState,...fn(r.elements,{...r.appState,width:this.state.width,height:this.state.height,offsetTop:this.state.offsetTop,offsetLeft:this.state.offsetLeft})}),this.resetStore(),this.resetHistory(),this.syncActionResult({...r,captureUpdate:L.NEVER}),this.clearImageShapeCache(),this.fonts.loadSceneFonts().then(n=>{this.fonts.onLoaded(n)}),pn(window.location.href)&&this.scrollToContent(window.location.href,{animate:!1})});C(this,"isMobileBreakpoint",(t,r)=>t<Ch||r<Sh&&t<Ih);C(this,"refreshViewportBreakpoints",()=>{if(!this.excalidrawContainerRef.current)return;let{clientWidth:r,clientHeight:n}=document.body,i=this.device.viewport,a=Hn(i,{isLandscape:r>n,isMobile:this.isMobileBreakpoint(r,n)});return i!==a?(this.device={...this.device,viewport:a},!0):!1});C(this,"refreshEditorBreakpoints",()=>{let t=this.excalidrawContainerRef.current;if(!t)return;let{width:r,height:n}=t.getBoundingClientRect(),i=this.props.UIOptions.dockedSidebarBreakpoint!=null?this.props.UIOptions.dockedSidebarBreakpoint:kh,a=this.device.editor,l=Hn(a,{isMobile:this.isMobileBreakpoint(r,n),canFitSidebar:r>i});return a!==l?(this.device={...this.device,editor:l},!0):!1});C(this,"onResize",Fe(()=>{this.scene.getElementsIncludingDeleted().forEach(t=>fr.delete(t)),this.refreshViewportBreakpoints(),this.updateDOMRect(),Qi||this.refreshEditorBreakpoints(),this.setState({})}));C(this,"onFullscreenChange",()=>{!document.fullscreenElement&&this.state.activeEmbeddable?.state==="active"&&this.setState({activeEmbeddable:null})});C(this,"renderInteractiveSceneCallback",({atLeastOneVisibleElement:t,scrollBars:r,elementsMap:n})=>{r&&(Pg=r);let i=this.state.editingTextElement?!1:!t&&n.size>0;this.state.scrolledOutside!==i&&this.setState({scrolledOutside:i}),this.scheduleImageRefresh()});C(this,"onScroll",$r(()=>{let{offsetTop:t,offsetLeft:r}=this.getCanvasOffsets();this.setState(n=>n.offsetLeft===r&&n.offsetTop===t?null:{offsetTop:t,offsetLeft:r})},vh));C(this,"onCut",Fe(t=>{!this.excalidrawContainerRef.current?.contains(document.activeElement)||Co(t.target)||(this.actionManager.executeAction(yc,"keyboard",t),t.preventDefault(),t.stopPropagation())}));C(this,"onCopy",Fe(t=>{!this.excalidrawContainerRef.current?.contains(document.activeElement)||Co(t.target)||(this.actionManager.executeAction(_i,"keyboard",t),t.preventDefault(),t.stopPropagation())}));C(this,"onTouchStart",t=>{if(ch&&t.preventDefault(),!al){al=!0,clearTimeout(Mg),Mg=window.setTimeout(e.resetTapTwice,Eh);return}if(al&&t.touches.length===1){let r=t.touches[0];this.handleCanvasDoubleClick({clientX:r.clientX,clientY:r.clientY}),al=!1,clearTimeout(Mg)}t.touches.length===2&&this.setState({selectedElementIds:Ee({},this.state),activeEmbeddable:null})});C(this,"onTouchEnd",t=>{this.resetContextMenuTimer(),t.touches.length>0?this.setState({previousSelectedElementIds:{},selectedElementIds:Ee(this.state.previousSelectedElementIds,this.state)}):fe.pointers.clear()});C(this,"pasteFromClipboard",Fe(async t=>{let r=!!Rd,n=document.activeElement,i=this.excalidrawContainerRef.current?.contains(n);if(t&&!i)return;let a=document.elementFromPoint(this.lastViewportPosition.x,this.lastViewportPosition.y);if(t&&(!(a instanceof HTMLCanvasElement)||Co(n)))return;let{x:l,y:s}=Re({clientX:this.lastViewportPosition.x,clientY:this.lastViewportPosition.y},this.state),c=t?.clipboardData?.files[0],m=await _s(t,r);if(!c&&!r){if(m.mixedContent)return this.addElementsFromMixedContentPaste(m.mixedContent,{isPlainPaste:r,sceneX:l,sceneY:s});if(m.text){let d=m.text.trim();d.startsWith("<svg")&&d.endsWith("</svg>")&&(c=Fm(d))}}if(Es(c)&&!m.spreadsheet){if(!this.isToolSupported("image")){this.setState({errorMessage:g("errors.imageToolNotSupported")});return}let d=this.createImageElement({sceneX:l,sceneY:s});this.insertImageElement(d,c),this.initializeImageDimensions(d),this.setState({selectedElementIds:Ee({[d.id]:!0},this.state)});return}if(this.props.onPaste)try{if(await this.props.onPaste(m,t)===!1)return}catch(d){console.error(d)}if(m.errorMessage)this.setState({errorMessage:m.errorMessage});else if(m.spreadsheet&&!r)this.setState({pasteDialog:{data:m.spreadsheet,shown:!0}});else if(m.elements){let d=m.programmaticAPI?Yi(m.elements):m.elements;this.addElementsFromPasteOrLibrary({elements:d,files:m.files||null,position:"cursor",retainSeed:r})}else if(m.text){if(m.text&&lT(m.text)){let u=await import("@excalidraw/mermaid-to-excalidraw");try{let{elements:h,files:f={}}=await u.parseMermaidToExcalidraw(m.text),b=Yi(h,{regenerateIds:!0});this.addElementsFromPasteOrLibrary({elements:b,files:f,position:"cursor"});return}catch(h){console.warn(`parsing pasted text as mermaid definition failed: ${h.message}`)}}let d=$h(m.text).split(/\n+/).map(u=>u.trim()).filter(Boolean),p=d.map(u=>Tx(u)).filter(u=>li(u,this.props.validateEmbeddable)&&(/^(http|https):\/\/[^\s/$.?#].[^\s]*$/.test(u)||dn(u)?.type==="video"));if(!Rd&&p.length>0&&p.length===d.length){let u=[];for(let h of p){let f=u[u.length-1],b=this.insertEmbeddableElement({sceneX:f?f.x+f.width+20:l,sceneY:s,link:uo(h)});b&&u.push(b)}u.length&&this.setState({selectedElementIds:Object.fromEntries(u.map(h=>[h.id,!0]))});return}this.addTextFromPaste(m.text,r)}this.setActiveTool({type:"selection"}),t?.preventDefault()}));C(this,"addElementsFromPasteOrLibrary",t=>{let r=Pm(t.elements,null,void 0),[n,i,a,l]=Se(r),s=jr(n,a)/2,c=jr(i,l)/2,m=typeof t.position=="object"?t.position.clientX:t.position==="cursor"?this.lastViewportPosition.x:this.state.width/2+this.state.offsetLeft,d=typeof t.position=="object"?t.position.clientY:t.position==="cursor"?this.lastViewportPosition.y:this.state.height/2+this.state.offsetTop,{x:p,y:u}=Re({clientX:m,clientY:d},this.state),h=p-s,f=u-c,[b,x]=nt(h,f,this.getEffectiveGridSize()),T=ls(r.map(k=>q(k,{x:k.x+b-n,y:k.y+x-i})),{randomizeSeed:!t.retainSeed}),E=this.scene.getElementsIncludingDeleted(),w=[...E,...T];w=this.props.onDuplicate?.(w,E)||w,fo(w,Q(T));let I=this.getTopLayerFrameAtSceneCoords({x:p,y:u});if(I){let k=iE(T,I);mi(w,k,I,this.state)}this.scene.replaceAllElements(w),T.forEach(k=>{if(Y(k)&&qe(k)){let R=Qt(k,this.scene.getElementsMapIncludingDeleted());Ue(k,R,this.scene.getElementsMapIncludingDeleted())}}),sh&&br.loadElementsFonts(T).then(k=>{this.fonts.onLoaded(k)}),t.files&&this.addMissingFiles(t.files),this.store.shouldCaptureIncrement();let _=Ys(T);this.setState({...this.state,openSidebar:this.state.openSidebar&&this.device.editor.canFitSidebar&&st.get(Ja)?this.state.openSidebar:null,...We({editingGroupId:null,selectedElementIds:_.reduce((k,R)=>(qe(R)||(k[R.id]=!0),k),{})},this.scene.getNonDeletedElements(),this.state,this)},()=>{t.files&&this.addNewImagesToImageCache()}),this.setActiveTool({type:"selection"}),t.fitToContent&&this.scrollToContent(T,{fitToContent:!0,canvasOffsets:this.getEditorUIOffsets()})});C(this,"setAppState",(t,r)=>{this.setState(t,r)});C(this,"removePointer",t=>{Ur&&this.resetContextMenuTimer(),fe.pointers.delete(t.pointerId)});C(this,"toggleLock",(t="ui")=>{this.state.activeTool.locked||le("toolbar","toggleLock",`${t} (${this.device.editor.isMobile?"mobile":"desktop"})`),this.setState(r=>({activeTool:{...r.activeTool,...Be(this.state,r.activeTool.locked?{type:"selection"}:r.activeTool),locked:!r.activeTool.locked}}))});C(this,"updateFrameRendering",t=>{this.setState(r=>{let n=typeof t=="function"?t(r.frameRendering):t;return{frameRendering:{enabled:n?.enabled??r.frameRendering.enabled,clip:n?.clip??r.frameRendering.clip,name:n?.name??r.frameRendering.name,outline:n?.outline??r.frameRendering.outline}}})});C(this,"togglePenMode",t=>{this.setState(r=>({penMode:t??!r.penMode,penDetected:!0}))});C(this,"onHandToolToggle",()=>{this.actionManager.executeAction(Zy)});C(this,"zoomCanvas",t=>{this.setState({...Qo({viewportX:this.state.width/2+this.state.offsetLeft,viewportY:this.state.height/2+this.state.offsetTop,nextZoom:Ao(t)},this.state)})});C(this,"cancelInProgressAnimation",null);C(this,"scrollToContent",(t=this.scene.getNonDeletedElements(),r)=>{if(typeof t=="string"){let s;if(pn(t)?s=Vx(t):s=t,s){let c=this.scene.getElementsFromId(s);c?.length?this.scrollToContent(c,{fitToContent:r?.fitToContent??!0,animate:r?.animate??!0}):pn(t)&&this.setState({toast:{message:g("elementLink.notFound"),duration:3e3,closable:!0}})}return}this.cancelInProgressAnimation?.();let n=Array.isArray(t)?t:[t],i=this.state.zoom,a=this.state.scrollX,l=this.state.scrollY;if(r?.fitToContent||r?.fitToViewport){let{appState:s}=Fa({canvasOffsets:r.canvasOffsets,targetElements:n,appState:this.state,fitToViewport:!!r?.fitToViewport,viewportZoomFactor:r?.viewportZoomFactor,minZoom:r?.minZoom,maxZoom:r?.maxZoom});i=s.zoom,a=s.scrollX,l=s.scrollY}else{let s=fn(n,this.state);a=s.scrollX,l=s.scrollY}if(r?.animate){let s=this.state.scrollX,c=this.state.scrollY,m=this.state.zoom.value,d=Fh({fromValues:{scrollX:s,scrollY:c,zoom:m},toValues:{scrollX:a,scrollY:l,zoom:i.value},interpolateValue:(p,u,h,f)=>{if(f==="zoom")return p*Math.pow(u/p,Zr(h))},onStep:({scrollX:p,scrollY:u,zoom:h})=>{this.setState({scrollX:p,scrollY:u,zoom:{value:h}})},onStart:()=>{this.setState({shouldCacheIgnoreZoom:!0})},onEnd:()=>{this.setState({shouldCacheIgnoreZoom:!1})},onCancel:()=>{this.setState({shouldCacheIgnoreZoom:!1})},duration:r?.duration??500});this.cancelInProgressAnimation=()=>{d(),this.cancelInProgressAnimation=null}}else this.setState({scrollX:a,scrollY:l,zoom:i})});C(this,"maybeUnfollowRemoteUser",()=>{this.state.userToFollow&&this.setState({userToFollow:null})});C(this,"translateCanvas",t=>{this.cancelInProgressAnimation?.(),this.maybeUnfollowRemoteUser(),this.setState(t)});C(this,"setToast",t=>{this.setState({toast:t})});C(this,"restoreFileFromShare",async()=>{try{let t=await caches.open("web-share-target"),r=await t.match("shared-file");if(r){let n=await r.blob(),i=new File([n],n.name||"",{type:n.type});this.loadFileToCanvas(i,null),await t.delete("shared-file"),window.history.replaceState(null,ea,window.location.pathname)}}catch(t){this.setState({errorMessage:t.message})}});C(this,"addFiles",Fe(t=>{let{addedFiles:r}=this.addMissingFiles(t);this.clearImageShapeCache(r),this.scene.triggerUpdate(),this.addNewImagesToImageCache()}));C(this,"addMissingFiles",(t,r=!1)=>{let n=r?{}:{...this.files},i={},a=Array.isArray(t)?t:Object.values(t);for(let l of a)if(!n[l.id]&&(i[l.id]=l,n[l.id]=l,l.mimeType===je.svg))try{let s=Dx(Hm(Rx(l.dataURL)),je.svg);l.dataURL!==s&&(l.version=(l.version??1)+1,l.dataURL=s)}catch(s){console.error(s)}return this.files=n,{addedFiles:i}});C(this,"updateScene",Fe(t=>{let r=Jo(t.elements??[]);if(t.captureUpdate&&t.captureUpdate!==L.EVENTUALLY){let n=this.store.snapshot.appState,i=this.store.snapshot.elements,a=t.appState?Object.assign({},n,t.appState):n,l=t.elements?this.store.filterUncomittedElements(this.scene.getElementsMapIncludingDeleted(),Q(r)):i;t.captureUpdate===L.IMMEDIATELY?this.store.captureIncrement(l,a):t.captureUpdate===L.NEVER&&this.store.updateSnapshot(l,a)}t.appState&&this.setState(t.appState),t.elements&&this.scene.replaceAllElements(r),t.collaborators&&this.setState({collaborators:t.collaborators})}));C(this,"triggerRender",t=>{t===!0?this.scene.triggerUpdate():this.setState({})});C(this,"toggleSidebar",({name:t,tab:r,force:n})=>{let i;n===void 0?i=this.state.openSidebar?.name===t&&this.state.openSidebar?.tab===r?null:t:i=n?t:null;let a=i?{name:i}:null;return a&&r&&(a.tab=r),this.setState({openSidebar:a}),!!i});C(this,"updateCurrentCursorPosition",Fe(t=>{this.lastViewportPosition.x=t.clientX,this.lastViewportPosition.y=t.clientY}));C(this,"getEditorUIOffsets",()=>{let t=this.excalidrawContainerRef?.current?.querySelector(".App-toolbar")?.getBoundingClientRect()?.bottom??0,r=this.excalidrawContainerRef?.current?.querySelector(".sidebar")?.getBoundingClientRect(),n=this.excalidrawContainerRef?.current?.querySelector(".App-menu__left")?.getBoundingClientRect(),i=16;return qo().rtl?{top:t+i,right:Math.max(this.state.width-(n?.left??this.state.width),0)+i,bottom:i,left:Math.max(r?.right??0,0)+i}:{top:t+i,right:Math.max(this.state.width-(r?.left??this.state.width)+i,0),bottom:i,left:Math.max(n?.right??0,0)+i}});C(this,"onKeyDown",Fe(t=>{if("Proxy"in window&&(!t.shiftKey&&/^[A-Z]$/.test(t.key)||t.shiftKey&&/^[a-z]$/.test(t.key))&&(t=new Proxy(t,{get(a,l){let s=a[l];return typeof s=="function"?s.bind(a):l==="key"?t.shiftKey?a.key.toUpperCase():a.key.toLowerCase():s}})),!rm(t.target)){if((t.key===y.ESCAPE||t.key===y.ENTER)&&this.state.croppingElementId){this.finishImageCropping();return}let a=$(this.scene.getNonDeletedElementsMap(),this.state);if(a.length===1&&xe(a[0])&&t.key===y.ENTER){this.startImageCropping(a[0]);return}if(t.key===y.ESCAPE&&this.flowChartCreator.isCreatingChart){this.flowChartCreator.clear(),this.triggerRender(!0);return}let l=an(t.key);if(t[y.CTRL_OR_CMD]&&l&&!t.shiftKey){t.preventDefault();let s=$(this.scene.getNonDeletedElementsMap(),this.state);s.length===1&&en(s[0])&&this.flowChartCreator.createNodes(s[0],this.scene.getNonDeletedElementsMap(),this.state,Hu(t.key)),this.flowChartCreator.pendingNodes?.length&&!gi(this.flowChartCreator.pendingNodes,this.canvas.width/window.devicePixelRatio,this.canvas.height/window.devicePixelRatio,{offsetLeft:this.state.offsetLeft,offsetTop:this.state.offsetTop,scrollX:this.state.scrollX,scrollY:this.state.scrollY,zoom:this.state.zoom},this.scene.getNonDeletedElementsMap(),this.getEditorUIOffsets())&&this.scrollToContent(this.flowChartCreator.pendingNodes,{animate:!0,duration:300,fitToContent:!0,canvasOffsets:this.getEditorUIOffsets()});return}if(t.altKey){let s=$(this.scene.getNonDeletedElementsMap(),this.state);if(s.length===1&&l){t.preventDefault();let c=this.flowChartNavigator.exploreByDirection(s[0],this.scene.getNonDeletedElementsMap(),Hu(t.key));if(c){this.setState(d=>({selectedElementIds:Ee({[c]:!0},d)}));let m=this.scene.getNonDeletedElementsMap().get(c);m&&!gi([m],this.canvas.width/window.devicePixelRatio,this.canvas.height/window.devicePixelRatio,{offsetLeft:this.state.offsetLeft,offsetTop:this.state.offsetTop,scrollX:this.state.scrollX,scrollY:this.state.scrollY,zoom:this.state.zoom},this.scene.getNonDeletedElementsMap(),this.getEditorUIOffsets())&&this.scrollToContent(m,{animate:!0,duration:300,canvasOffsets:this.getEditorUIOffsets()})}return}}}if(t[y.CTRL_OR_CMD]&&t.key===y.P&&!t.shiftKey&&!t.altKey){this.setToast({message:g("commandPalette.shortcutHint",{shortcut:Ye("commandPalette")})}),t.preventDefault();return}if(t[y.CTRL_OR_CMD]&&t.key.toLowerCase()===y.V&&(Rd=t.shiftKey,clearTimeout(pT),pT=window.setTimeout(()=>{Rd=!1},100)),t[y.CTRL_OR_CMD]&&Co(t.target)&&(t.code===te.MINUS||t.code===te.EQUAL)){t.preventDefault();return}if(Co(t.target)&&t.key!==y.ESCAPE||an(t.key)&&rm(t.target))return;if(t.key===y.QUESTION_MARK){this.setState({openDialog:{name:"help"}});return}else if(t.key.toLowerCase()===y.E&&t.shiftKey&&t[y.CTRL_OR_CMD]){t.preventDefault(),this.setState({openDialog:{name:"imageExport"}});return}if(t.key===y.PAGE_UP||t.key===y.PAGE_DOWN){let a=(t.shiftKey?this.state.width:this.state.height)/this.state.zoom.value;t.key===y.PAGE_DOWN&&(a=-a),t.shiftKey?this.translateCanvas(l=>({scrollX:l.scrollX+a})):this.translateCanvas(l=>({scrollY:l.scrollY+a}))}if(this.state.openDialog?.name==="elementLinkSelector"||this.actionManager.handleKeyDown(t)||this.state.viewModeEnabled)return;if(t[y.CTRL_OR_CMD]&&this.state.isBindingEnabled&&this.setState({isBindingEnabled:!1}),an(t.key)){let a=this.scene.getSelectedElements({selectedElementIds:this.state.selectedElementIds,includeBoundTextElement:!0,includeElementsInFrames:!0}),l=a.find(ee),s=new Set;a.filter(ee).filter(p=>{let u=p.startBinding&&!a.some(f=>f.id===p.startBinding?.elementId),h=p.endBinding&&!a.some(f=>f.id===p.endBinding?.elementId);return u||h}).forEach(p=>s.add(p.id)),a=a.filter(p=>!s.has(p.id));let c=this.getEffectiveGridSize()&&(t.shiftKey?Gd:this.getEffectiveGridSize())||(t.shiftKey?mh:Gd),m=0,d=0;t.key===y.ARROW_LEFT?m=-c:t.key===y.ARROW_RIGHT?m=c:t.key===y.ARROW_UP?d=-c:t.key===y.ARROW_DOWN&&(d=c),a.forEach(p=>{P(p,{x:p.x+m,y:p.y+d},!1),Jt(p,this.scene.getNonDeletedElementsMap(),{simultaneouslyUpdated:a})}),this.setState({suggestedBindings:gs(a.filter(p=>p.id!==l?.id||c!==0),this.scene.getNonDeletedElementsMap(),this.state.zoom)}),this.scene.triggerUpdate(),t.preventDefault()}else if(t.key===y.ENTER){let a=this.scene.getSelectedElements(this.state);if(a.length===1){let l=a[0];if(t[y.CTRL_OR_CMD])he(l)&&(!this.state.editingLinearElement||this.state.editingLinearElement.elementId!==a[0].id)&&(this.store.shouldCaptureIncrement(),ee(l)||this.setState({editingLinearElement:new K(l)}));else if(Y(l)||IE(l)){let s;Y(l)||(s=l);let c=Us(l,this.state,this.scene.getNonDeletedElementsMap()),m=c.x,d=c.y;this.startTextEditing({sceneX:m,sceneY:d,container:s}),t.preventDefault();return}else ie(l)&&this.setState({editingFrame:l.id})}}else if(!t.ctrlKey&&!t.altKey&&!t.metaKey&&!this.state.newElement&&!this.state.selectionElement&&!this.state.selectedElementsAreBeingDragged){let a=cx(t.key);a?(this.state.activeTool.type!==a&&le("toolbar",a,`keyboard (${this.device.editor.isMobile?"mobile":"desktop"})`),a==="arrow"&&this.state.activeTool.type==="arrow"&&this.setState(l=>({currentItemArrowType:l.currentItemArrowType===Je.sharp?Je.round:l.currentItemArrowType===Je.round?Je.elbow:Je.sharp})),this.setActiveTool({type:a}),t.stopPropagation()):t.key===y.Q&&(this.toggleLock("keyboard"),t.stopPropagation())}if(t.key===y.SPACE&&fe.pointers.size===0&&(Mn=!0,Te(this.interactiveCanvas,we.GRAB),t.preventDefault()),(t.key===y.G||t.key===y.S)&&!t.altKey&&!t[y.CTRL_OR_CMD]){let a=this.scene.getSelectedElements(this.state);if(this.state.activeTool.type==="selection"&&!a.length)return;t.key===y.G&&(vr(this.state.activeTool.type)||a.some(l=>vr(l.type)))&&(this.setState({openPopup:"elementBackground"}),t.stopPropagation()),t.key===y.S&&(this.setState({openPopup:"elementStroke"}),t.stopPropagation())}if(!t[y.CTRL_OR_CMD]&&t.shiftKey&&t.key.toLowerCase()===y.F){let a=this.scene.getSelectedElements(this.state);if(this.state.activeTool.type==="selection"&&!a.length)return;(this.state.activeTool.type==="text"||a.find(l=>Y(l)||ue(l,this.scene.getNonDeletedElementsMap())))&&(t.preventDefault(),this.setState({openPopup:"fontFamily"}))}if(t.key===y.K&&!t.altKey&&!t[y.CTRL_OR_CMD]){this.state.activeTool.type==="laser"?this.setActiveTool({type:"selection"}):this.setActiveTool({type:"laser"});return}t[y.CTRL_OR_CMD]&&(t.key===y.BACKSPACE||t.key===y.DELETE)&&st.set(In,"clearCanvas");let r=t.key.toLocaleLowerCase(),n=r===y.S&&t.shiftKey,i=t.key===y.I||r===y.G&&t.shiftKey;(n||i)&&this.openEyeDropper({type:n?"stroke":"background"})}));C(this,"onKeyUp",Fe(t=>{if(t.key===y.SPACE&&(this.state.viewModeEnabled||this.state.openDialog?.name==="elementLinkSelector"?Te(this.interactiveCanvas,we.GRAB):this.state.activeTool.type==="selection"?Zt(this.interactiveCanvas):(go(this.interactiveCanvas,this.state),this.setState({selectedElementIds:Ee({},this.state),selectedGroupIds:{},editingGroupId:null,activeEmbeddable:null})),Mn=!1),!t[y.CTRL_OR_CMD]&&!this.state.isBindingEnabled&&this.setState({isBindingEnabled:!0}),an(t.key)&&(cn(this.scene.getSelectedElements(this.state).filter(he),this.scene.getNonDeletedElementsMap(),this.scene.getNonDeletedElements(),this.scene,sn(this.state),this.state.selectedLinearElement?.selectedPointsIndices??[],this.state.zoom),this.setState({suggestedBindings:[]})),t.altKey||this.flowChartNavigator.isExploring&&(this.flowChartNavigator.clear(),this.syncActionResult({captureUpdate:L.IMMEDIATELY})),!t[y.CTRL_OR_CMD]&&this.flowChartCreator.isCreatingChart){this.flowChartCreator.pendingNodes?.length&&this.scene.insertElements(this.flowChartCreator.pendingNodes);let r=this.flowChartCreator.pendingNodes?.[0];r&&(this.setState(n=>({selectedElementIds:Ee({[r.id]:!0},n)})),gi([r],this.canvas.width/window.devicePixelRatio,this.canvas.height/window.devicePixelRatio,{offsetLeft:this.state.offsetLeft,offsetTop:this.state.offsetTop,scrollX:this.state.scrollX,scrollY:this.state.scrollY,zoom:this.state.zoom},this.scene.getNonDeletedElementsMap(),this.getEditorUIOffsets())||this.scrollToContent(r,{animate:!0,duration:300,canvasOffsets:this.getEditorUIOffsets()})),this.flowChartCreator.clear(),this.syncActionResult({captureUpdate:L.IMMEDIATELY})}}));C(this,"isToolSupported",t=>this.props.UIOptions.tools?.[t]!==!1);C(this,"setActiveTool",t=>{if(!this.isToolSupported(t.type)){console.warn(`"${t.type}" tool is disabled via "UIOptions.canvasActions.tools.${t.type}"`);return}let r=Be(this.state,t);r.type==="hand"?Te(this.interactiveCanvas,we.GRAB):Mn||go(this.interactiveCanvas,{...this.state,activeTool:r}),Nh(document.activeElement)&&this.focusContainer(),jh(r.type)||this.setState({suggestedBindings:[]}),r.type==="image"&&this.onImageAction({insertOnCanvasDirectly:(t.type==="image"&&t.insertOnCanvasDirectly)??!1}),this.setState(n=>{let i={snapLines:n.snapLines.length?[]:n.snapLines,originSnapOffset:null,activeEmbeddable:null};return r.type==="freedraw"&&this.store.shouldCaptureIncrement(),r.type!=="selection"?{...n,activeTool:r,selectedElementIds:Ee({},n),selectedGroupIds:Ee({},n),editingGroupId:null,multiElement:null,...i}:{...n,activeTool:r,...i}})});C(this,"setOpenDialog",t=>{this.setState({openDialog:t})});C(this,"setCursor",t=>{Te(this.interactiveCanvas,t)});C(this,"resetCursor",()=>{Zt(this.interactiveCanvas)});C(this,"isTouchScreenMultiTouchGesture",()=>fe.pointers.size>=2);C(this,"getName",()=>this.state.name||this.props.name||`${g("labels.untitled")}-${om()}`);C(this,"onGestureStart",Fe(t=>{t.preventDefault(),this.isTouchScreenMultiTouchGesture()&&this.setState({selectedElementIds:Ee({},this.state),activeEmbeddable:null}),fe.initialScale=this.state.zoom.value}));C(this,"onGestureChange",Fe(t=>{if(t.preventDefault(),this.isTouchScreenMultiTouchGesture())return;let r=fe.initialScale;r&&this.setState(n=>({...Qo({viewportX:this.lastViewportPosition.x,viewportY:this.lastViewportPosition.y,nextZoom:Ao(r*t.scale)},n)}))}));C(this,"onGestureEnd",Fe(t=>{t.preventDefault(),this.isTouchScreenMultiTouchGesture()&&this.setState({previousSelectedElementIds:{},selectedElementIds:Ee(this.state.previousSelectedElementIds,this.state)}),fe.initialScale=null}));C(this,"startTextEditing",({sceneX:t,sceneY:r,insertAtParentCenter:n=!0,container:i,autoEdit:a=!0})=>{let l=!1,s=n&&this.getTextWysiwygSnappedToCenterPosition(t,r,this.state,i);i&&s&&(ue(i,this.scene.getNonDeletedElementsMap())||(l=!0));let c=null,m=this.scene.getSelectedElements(this.state);m.length===1?Y(m[0])?c=m[0]:i?c=ue(m[0],this.scene.getNonDeletedElementsMap()):c=this.getTextElementAtPosition(t,r):c=this.getTextElementAtPosition(t,r);let d=c?.fontFamily||this.state.currentItemFontFamily,p=c?.lineHeight||$o(d),u=this.state.currentItemFontSize;if(!c&&l&&i&&!Ne(i)){let x=of(lt({fontSize:u,fontFamily:d}),p),T=lf(u,p),E=Math.max(i.height,T),w=Math.max(i.width,x);P(i,{height:E,width:w}),t=i.x+w/2,r=i.y+E/2,s&&(s=this.getTextWysiwygSnappedToCenterPosition(t,r,this.state,i))}let h=this.getTopLayerFrameAtSceneCoords({x:t,y:r}),f=c||So({x:s?s.elementCenterX:t,y:s?s.elementCenterY:r,strokeColor:this.state.currentItemStrokeColor,backgroundColor:this.state.currentItemBackgroundColor,fillStyle:this.state.currentItemFillStyle,strokeWidth:this.state.currentItemStrokeWidth,strokeStyle:this.state.currentItemStrokeStyle,roughness:this.state.currentItemRoughness,opacity:this.state.currentItemOpacity,text:"",fontSize:u,fontFamily:d,textAlign:s?"center":this.state.currentItemTextAlign,verticalAlign:s?Kt.MIDDLE:Vd,containerId:l?i?.id:void 0,groupIds:i?.groupIds??[],lineHeight:p,angle:i?.angle??0,frameId:h?h.id:null});if(!c&&l&&i&&P(i,{boundElements:(i.boundElements||[]).concat({type:"text",id:f.id})}),this.setState({editingTextElement:f}),!c)if(i&&l){let b=this.scene.getElementIndex(i.id);this.scene.insertElementAtIndex(f,b+1)}else this.scene.insertElement(f);a||c||i?this.handleTextWysiwyg(f,{isExistingElement:!!c}):this.setState({newElement:f,multiElement:null})});C(this,"startImageCropping",t=>{this.store.shouldCaptureIncrement(),this.setState({croppingElementId:t.id})});C(this,"finishImageCropping",()=>{this.state.croppingElementId&&(this.store.shouldCaptureIncrement(),this.setState({croppingElementId:null}))});C(this,"handleCanvasDoubleClick",t=>{if(this.state.multiElement||this.state.activeTool.type!=="selection")return;let r=this.scene.getSelectedElements(this.state),{x:n,y:i}=Re(t,this.state);if(r.length===1&&he(r[0])){if(t[y.CTRL_OR_CMD]&&(!this.state.editingLinearElement||this.state.editingLinearElement.elementId!==r[0].id)&&!ee(r[0])){this.store.shouldCaptureIncrement(),this.setState({editingLinearElement:new K(r[0])});return}else if(this.state.selectedLinearElement&&ee(r[0])){let l=K.getSegmentMidpointHitCoords(this.state.selectedLinearElement,{x:n,y:i},this.state,this.scene.getNonDeletedElementsMap()),s=l?K.getSegmentMidPointIndex(this.state.selectedLinearElement,this.state,l,this.scene.getNonDeletedElementsMap()):-1;if(s&&s>-1){this.store.shouldCaptureIncrement(),K.deleteFixedSegment(r[0],s);let c=K.getSegmentMidpointHitCoords({...this.state.selectedLinearElement,segmentMidPointHoveredCoords:null},{x:n,y:i},this.state,this.scene.getNonDeletedElementsMap()),m=c?K.getSegmentMidPointIndex(this.state.selectedLinearElement,this.state,c,this.scene.getNonDeletedElementsMap()):null;this.setState({selectedLinearElement:{...this.state.selectedLinearElement,pointerDownState:{...this.state.selectedLinearElement.pointerDownState,segmentMidpoint:{index:m,value:l,added:!1}},segmentMidPointHoveredCoords:c}});return}}}if(r.length===1&&xe(r[0])){this.startImageCropping(r[0]);return}if(Zt(this.interactiveCanvas),po(this.state).length>0){let l=this.getElementAtPosition(n,i),s=l&&uf(l,this.state.selectedGroupIds);if(s){this.store.shouldCaptureIncrement(),this.setState(c=>({...c,...We({editingGroupId:s,selectedElementIds:{[l.id]:!0}},this.scene.getNonDeletedElements(),c,this)}));return}}if(Zt(this.interactiveCanvas),!t[y.CTRL_OR_CMD]&&!this.state.viewModeEnabled){let l=this.getElementAtPosition(n,i);if(Wn(l)){this.setState({activeEmbeddable:{element:l,state:"active"}});return}let s=this.getTextBindableContainerAtPosition(n,i);if(s&&(ut(s)||!Jr(s.backgroundColor)||ai({x:n,y:i,element:s,shape:ln(s,this.scene.getNonDeletedElementsMap()),threshold:this.getElementHitThreshold()}))){let c=Us(s,this.state,this.scene.getNonDeletedElementsMap());n=c.x,i=c.y}this.startTextEditing({sceneX:n,sceneY:i,insertAtParentCenter:!t.altKey,container:s})}});C(this,"getElementLinkAtPosition",(t,r)=>{let n=this.scene.getNonDeletedElements(),i=-1;for(let a=n.length-1;a>=0;a--){let l=n[a];if(r&&l.id===r.id&&(i=a),l.link&&a>=i&&Ts(l,this.scene.getNonDeletedElementsMap(),this.state,z(t.x,t.y),this.device.editor.isMobile))return l}});C(this,"redirectToLink",(t,r)=>{let n=dr(z(this.lastPointerDownEvent.clientX,this.lastPointerDownEvent.clientY),z(this.lastPointerUpEvent.clientX,this.lastPointerUpEvent.clientY));if(!this.hitLinkElement||n>Vr)return;let i=Re(this.lastPointerDownEvent,this.state),a=this.scene.getNonDeletedElementsMap(),l=Ts(this.hitLinkElement,a,this.state,z(i.x,i.y),this.device.editor.isMobile),s=Re(this.lastPointerUpEvent,this.state),c=Ts(this.hitLinkElement,a,this.state,z(s.x,s.y),this.device.editor.isMobile);if(l&&c){lu();let m=this.hitLinkElement.link;if(m){m=uo(m);let d;if(this.props.onLinkOpen&&(d=Pl("excalidraw-link",t.nativeEvent),this.props.onLinkOpen({...this.hitLinkElement,link:m},d)),!d?.defaultPrevented){let p=zl(m)?"_self":"_blank",u=window.open(void 0,p);u&&(u.opener=null,u.location=m)}}}});C(this,"getTopLayerFrameAtSceneCoords",t=>{let r=this.scene.getNonDeletedElementsMap(),n=this.scene.getNonDeletedFramesLikes().filter(i=>Ym(t,i,r));return n.length?n[n.length-1]:null});C(this,"handleCanvasPointerMove",t=>{this.savePointer(t.clientX,t.clientY,this.state.cursorButton),this.lastPointerMoveEvent=t.nativeEvent,fe.pointers.has(t.pointerId)&&fe.pointers.set(t.pointerId,{x:t.clientX,y:t.clientY});let r=fe.initialScale;if(fe.pointers.size===2&&fe.lastCenter&&r&&fe.initialDistance){let u=Ou(fe.pointers),h=u.x-fe.lastCenter.x,f=u.y-fe.lastCenter.y;fe.lastCenter=u;let b=Fu(Array.from(fe.pointers.values())),x=this.state.activeTool.type==="freedraw"&&this.state.penMode?1:b/fe.initialDistance,T=x?Ao(r*x):this.state.zoom.value;this.setState(E=>{let w=Qo({viewportX:u.x,viewportY:u.y,nextZoom:T},E);this.translateCanvas({zoom:w.zoom,scrollX:w.scrollX+2*(h/T),scrollY:w.scrollY+2*(f/T),shouldCacheIgnoreZoom:!0})}),this.resetShouldCacheIgnoreZoomDebounced()}else fe.lastCenter=fe.initialDistance=fe.initialScale=null;if(Mn||ll||Dg||Xo(this.state))return;let i=Gu(Pg,t.clientX-this.state.offsetLeft,t.clientY-this.state.offsetTop).isOverEither;!this.state.newElement&&!this.state.selectionElement&&!this.state.selectedElementsAreBeingDragged&&!this.state.multiElement&&(i?Zt(this.interactiveCanvas):go(this.interactiveCanvas,this.state));let a=Re(t,this.state),{x:l,y:s}=a;if(!this.state.newElement&&fE(this.state.activeTool.type)){let{originOffset:u,snapLines:h}=hE(this.scene.getNonDeletedElements(),this,{x:l,y:s},t,this.scene.getNonDeletedElementsMap());this.setState(f=>{let b=Yn(f.snapLines,h),x=f.originSnapOffset?Yn(f.originSnapOffset,u):u;return f.snapLines===b&&f.originSnapOffset===x?null:{snapLines:b,originSnapOffset:x}})}else!this.state.newElement&&!this.state.selectedElementsAreBeingDragged&&!this.state.selectionElement&&this.setState(u=>u.snapLines.length?{snapLines:[]}:null);if(this.state.editingLinearElement&&!this.state.editingLinearElement.isDragging){let u=K.handlePointerMove(t,l,s,this,this.scene.getNonDeletedElementsMap());u&&u!==this.state.editingLinearElement&&_n(()=>{this.setState({editingLinearElement:u})}),u?.lastUncommittedPoint!=null?this.maybeSuggestBindingAtCursor(a,u.elbowed):_n(()=>{this.setState({suggestedBindings:[]})})}if(Jh(this.state.activeTool.type)){let{newElement:u}=this.state;Wo(u,!1)?this.maybeSuggestBindingsForLinearElementAtCoords(u,[a],this.state.startBoundElement):this.maybeSuggestBindingAtCursor(a,!1)}if(this.state.multiElement){let{multiElement:u}=this.state,{x:h,y:f}=u,{points:b,lastCommittedPoint:x}=u,T=b[b.length-1];if(go(this.interactiveCanvas,this.state),T===x)dr(z(l-h,s-f),T)>=El?P(u,{points:[...b,z(l-h,s-f)]},!1):Te(this.interactiveCanvas,we.POINTER);else if(b.length>2&&x&&dr(z(l-h,s-f),x)<El)Te(this.interactiveCanvas,we.POINTER),P(u,{points:b.slice(0,-1)},!1);else{let[E,w]=nt(l,s,t[y.CTRL_OR_CMD]||ee(u)?null:this.getEffectiveGridSize()),[S,I]=u?.lastCommittedPoint??[0,0],_=E-h-S,k=w-f-I;ds(t)&&({width:_,height:k}=tp(S+h,I+f,E,w)),xa(b,this.state.zoom.value)&&Te(this.interactiveCanvas,we.POINTER),P(u,{points:[...b.slice(0,-1),z(S+_,I+k)]},!1,{isDragging:!0}),this.triggerRender(!1)}return}if(!!t.buttons||this.state.activeTool.type!=="selection"&&this.state.activeTool.type!=="text"&&this.state.activeTool.type!=="eraser")return;let m=this.scene.getNonDeletedElements(),d=this.scene.getSelectedElements(this.state);if(d.length===1&&!i&&!this.state.editingLinearElement){if(this.state.selectedLinearElement&&this.handleHoverSelectedLinearElement(this.state.selectedLinearElement,l,s),(!this.state.selectedLinearElement||this.state.selectedLinearElement.hoverPointIndex===-1)&&this.state.openDialog?.name!=="elementLinkSelector"&&!(d.length===1&&ee(d[0]))){let u=op(m,this.state,l,s,this.state.zoom,t.pointerType,this.scene.getNonDeletedElementsMap(),this.device);if(u&&u.transformHandleType){Te(this.interactiveCanvas,np(u));return}}}else if(d.length>1&&!i&&this.state.openDialog?.name!=="elementLinkSelector"){let u=rp(Se(d),l,s,this.state.zoom,t.pointerType,this.device);if(u){Te(this.interactiveCanvas,np({transformHandleType:u}));return}}let p=this.getElementAtPosition(a.x,a.y);this.hitLinkElement=this.getElementLinkAtPosition(a,p),!$t(this.state)&&(this.hitLinkElement&&!this.state.selectedElementIds[this.hitLinkElement.id]?(Te(this.interactiveCanvas,we.POINTER),Tv(this.hitLinkElement,this.state,this.scene.getNonDeletedElementsMap())):(lu(),p&&(p.link||Et(p))&&this.state.selectedElementIds[p.id]&&!this.state.contextMenu&&!this.state.showHyperlinkPopup?this.setState({showHyperlinkPopup:"info"}):this.state.activeTool.type==="text"?Te(this.interactiveCanvas,Y(p)?we.TEXT:we.CROSSHAIR):this.state.viewModeEnabled?Te(this.interactiveCanvas,we.GRAB):this.state.openDialog?.name==="elementLinkSelector"?Te(this.interactiveCanvas,we.AUTO):i?Te(this.interactiveCanvas,we.AUTO):this.state.selectedLinearElement?this.handleHoverSelectedLinearElement(this.state.selectedLinearElement,l,s):t[y.CTRL_OR_CMD]?Te(this.interactiveCanvas,we.AUTO):(p||this.isHittingCommonBoundingBoxOfSelectedElements(a,d))&&!p?.locked&&(p&&Wn(p)&&this.isIframeLikeElementCenter(p,t,l,s)?(Te(this.interactiveCanvas,we.POINTER),this.setState({activeEmbeddable:{element:p,state:"hover"}})):(!p||!ee(p))&&(Te(this.interactiveCanvas,we.MOVE),this.state.activeEmbeddable?.state==="hover"&&this.setState({activeEmbeddable:null})))),this.state.openDialog?.name==="elementLinkSelector"&&p?this.setState(u=>({hoveredElementIds:Yn(u.hoveredElementIds,We({editingGroupId:u.editingGroupId,selectedElementIds:{[p.id]:!0}},this.scene.getNonDeletedElements(),u,this).selectedElementIds)})):this.state.openDialog?.name==="elementLinkSelector"&&!p&&this.setState(u=>({hoveredElementIds:Yn(u.hoveredElementIds,{})})))});C(this,"handleEraser",(t,r,n)=>{this.eraserTrail.addPointToPath(n.x,n.y);let i=!1,a=new Set,l=this.scene.getNonDeletedElements(),s=u=>{for(let h of u){if(h.locked)return;if(t.altKey?this.elementsPendingErasure.delete(h.id)&&(i=!0):this.elementsPendingErasure.has(h.id)||(i=!0,this.elementsPendingErasure.add(h.id)),i&&h.groupIds?.length){let f=h.groupIds.at(-1);if(!a.has(f)){a.add(f);let b=Le(l,f);for(let x of b)t.altKey?this.elementsPendingErasure.delete(x.id):this.elementsPendingErasure.add(x.id)}}}},c=dr(z(r.lastCoords.x,r.lastCoords.y),z(n.x,n.y)),m=this.getElementHitThreshold(),d={...r.lastCoords},p=0;for(;p<=c;){let u=this.getElementsAtPosition(d.x,d.y);if(s(u),p===c)break;p=Math.min(p+m,c);let h=p/c,f=(1-h)*d.x+h*n.x,b=(1-h)*d.y+h*n.y;d.x=f,d.y=b}if(r.lastCoords.x=n.x,r.lastCoords.y=n.y,i){for(let u of this.scene.getNonDeletedElements())qe(u)&&(this.elementsPendingErasure.has(u.id)||this.elementsPendingErasure.has(u.containerId))&&(t.altKey?(this.elementsPendingErasure.delete(u.id),this.elementsPendingErasure.delete(u.containerId)):(this.elementsPendingErasure.add(u.id),this.elementsPendingErasure.add(u.containerId)));this.elementsPendingErasure=new Set(this.elementsPendingErasure),this.triggerRender()}});C(this,"handleTouchMove",t=>{sl=!0});C(this,"handleCanvasPointerDown",t=>{let r=t.target;if(r.setPointerCapture&&r.setPointerCapture(t.pointerId),this.maybeCleanupAfterMissingPointerUp(t.nativeEvent),this.maybeUnfollowRemoteUser(),this.state.searchMatches&&(this.setState(d=>({searchMatches:d.searchMatches.map(p=>({...p,focus:!1}))})),st.set(cg,null)),this.state.contextMenu&&this.setState({contextMenu:null}),this.state.snapLines&&this.setAppState({snapLines:[]}),this.updateGestureOnPointerDown(t),t.pointerType==="touch"&&this.state.newElement&&this.state.newElement.type==="freedraw"){let d=this.state.newElement;this.updateScene({...d.points.length<10?{elements:this.scene.getElementsIncludingDeleted().filter(p=>p.id!==d.id)}:{},appState:{newElement:null,editingTextElement:null,startBoundElement:null,suggestedBindings:[],selectedElementIds:Ee(Object.keys(this.state.selectedElementIds).filter(p=>p!==d.id).reduce((p,u)=>(p[u]=this.state.selectedElementIds[u],p),{}),this.state)},captureUpdate:this.state.openDialog?.name==="elementLinkSelector"?L.EVENTUALLY:L.NEVER});return}let n=document.getSelection();if(n?.anchorNode&&n.removeAllRanges(),this.maybeOpenContextMenuAfterPointerDownOnTouchDevices(t),!this.state.penDetected&&t.pointerType==="pen"&&this.setState(d=>({penMode:!0,penDetected:!0})),!this.device.isTouchScreen&&["pen","touch"].includes(t.pointerType)&&(this.device=Hn(this.device,{isTouchScreen:!0})),ll||(this.lastPointerDownEvent=t,this.handleCanvasPanUsingWheelOrSpaceDrag(t)))return;if(this.setState({lastPointerDownWith:t.pointerType,cursorButton:"down"}),this.savePointer(t.clientX,t.clientY,"down"),t.button===To.ERASER&&this.state.activeTool.type!==kt.eraser){this.setState({activeTool:Be(this.state,{type:kt.eraser,lastActiveToolBeforeEraser:this.state.activeTool})},()=>{this.handleCanvasPointerDown(t);let d=()=>{p(),u?.(),$t(this.state)&&this.setState({activeTool:Be(this.state,{...this.state.activeTool.lastActiveTool||{type:kt.selection},lastActiveToolBeforeEraser:null})})},p=Ae(window,"pointerup",d,{once:!0}),u;requestAnimationFrame(()=>{u=this.missingPointerEventCleanupEmitter.once(d)})});return}if(t.button!==To.MAIN&&t.button!==To.TOUCH&&t.button!==To.ERASER||fe.pointers.size>1)return;let i=this.initialPointerDownState(t);if(this.setState({selectedElementsAreBeingDragged:!1}),this.handleDraggingScrollBar(t,i)||(this.clearSelectionIfNotUsingSelection(),this.updateBindingEnabledOnPointerMove(t),this.handleSelectionOnPointerDown(t,i))||!(!this.state.penMode||t.pointerType!=="touch"||this.state.activeTool.type==="selection"||this.state.activeTool.type==="text"||this.state.activeTool.type==="image"))return;if(this.state.activeTool.type==="text")this.handleTextOnPointerDown(t,i);else if(this.state.activeTool.type==="arrow"||this.state.activeTool.type==="line")this.handleLinearElementOnPointerDown(t,this.state.activeTool.type,i);else if(this.state.activeTool.type==="image"){Te(this.interactiveCanvas,we.CROSSHAIR);let d=this.state.pendingImageElementId&&this.scene.getElement(this.state.pendingImageElementId);if(!d)return;this.setState({newElement:d,pendingImageElementId:null,multiElement:null});let{x:p,y:u}=Re(t,this.state),h=this.getTopLayerFrameAtSceneCoords({x:p,y:u});P(d,{x:p,y:u,frameId:h?h.id:null})}else this.state.activeTool.type==="freedraw"?this.handleFreeDrawElementOnPointerDown(t,this.state.activeTool.type,i):this.state.activeTool.type==="custom"?go(this.interactiveCanvas,this.state):this.state.activeTool.type===kt.frame||this.state.activeTool.type===kt.magicframe?this.createFrameElementOnPointerDown(i,this.state.activeTool.type):this.state.activeTool.type==="laser"?this.laserTrails.startPath(i.lastCoords.x,i.lastCoords.y):this.state.activeTool.type!=="eraser"&&this.state.activeTool.type!=="hand"&&this.createGenericElementOnPointerDown(this.state.activeTool.type,i);this.props?.onPointerDown?.(this.state.activeTool,i),this.onPointerDownEmitter.trigger(this.state.activeTool,i,t),this.state.activeTool.type==="eraser"&&this.eraserTrail.startPath(i.lastCoords.x,i.lastCoords.y);let l=this.onPointerMoveFromPointerDownHandler(i),s=this.onPointerUpFromPointerDownHandler(i),c=this.onKeyDownFromPointerDownHandler(i),m=this.onKeyUpFromPointerDownHandler(i);this.missingPointerEventCleanupEmitter.once(d=>s(d||t.nativeEvent)),(!this.state.viewModeEnabled||this.state.activeTool.type==="laser")&&(window.addEventListener("pointermove",l),window.addEventListener("pointerup",s),window.addEventListener("keydown",c),window.addEventListener("keyup",m),i.eventListeners.onMove=l,i.eventListeners.onUp=s,i.eventListeners.onKeyUp=m,i.eventListeners.onKeyDown=c)});C(this,"handleCanvasPointerUp",t=>{this.removePointer(t),this.lastPointerUpEvent=t;let r=Re({clientX:t.clientX,clientY:t.clientY},this.state),n=t.timeStamp-(this.lastPointerDownEvent?.timeStamp??0);if(this.device.editor.isMobile&&n<300){let i=this.getElementAtPosition(r.x,r.y);if(Wn(i)&&this.isIframeLikeElementCenter(i,t,r.x,r.y)){this.handleEmbeddableCenterClick(i);return}}if(this.device.isTouchScreen){let i=this.getElementAtPosition(r.x,r.y);this.hitLinkElement=this.getElementLinkAtPosition(r,i)}this.hitLinkElement&&!this.state.selectedElementIds[this.hitLinkElement.id]?n<300&&Wn(this.hitLinkElement)&&!Yx(this.hitLinkElement,this.scene.getNonDeletedElementsMap(),this.state,z(r.x,r.y))?this.handleEmbeddableCenterClick(this.hitLinkElement):this.redirectToLink(t,this.device.isTouchScreen):this.state.viewModeEnabled&&this.setState({activeEmbeddable:null,selectedElementIds:{}})});C(this,"maybeOpenContextMenuAfterPointerDownOnTouchDevices",t=>{t.pointerType==="touch"&&(sl=!1,Ur?sl=!0:Ur=window.setTimeout(()=>{Ur=0,sl||this.handleCanvasContextMenu(t)},yh))});C(this,"resetContextMenuTimer",()=>{clearTimeout(Ur),Ur=0,sl=!1});C(this,"maybeCleanupAfterMissingPointerUp",t=>{cl?.(),this.missingPointerEventCleanupEmitter.trigger(t).clear()});C(this,"handleCanvasPanUsingWheelOrSpaceDrag",t=>{if(!(fe.pointers.size<=1&&(t.button===To.WHEEL||t.button===To.MAIN&&Mn||Xo(this.state)||this.state.viewModeEnabled)))return!1;ll=!0,this.focusContainer(),this.state.editingTextElement||t.preventDefault();let r=!1,n=typeof window===void 0?!1:/Linux/.test(window.navigator.platform);Te(this.interactiveCanvas,we.GRABBING);let{clientX:i,clientY:a}=t,l=Ad(c=>{let m=i-c.clientX,d=a-c.clientY;if(i=c.clientX,a=c.clientY,n&&!r&&(Math.abs(m)>1||Math.abs(d)>1)){r=!0;let p=h=>{document.body.removeEventListener("paste",p),h.stopPropagation()},u=()=>{setTimeout(()=>{document.body.removeEventListener("paste",p),window.removeEventListener("pointerup",u)},100)};document.body.addEventListener("paste",p),window.addEventListener("pointerup",u)}this.translateCanvas({scrollX:this.state.scrollX-m/this.state.zoom.value,scrollY:this.state.scrollY-d/this.state.zoom.value})}),s=Fe(cl=()=>{cl=null,ll=!1,Mn||(this.state.viewModeEnabled?Te(this.interactiveCanvas,we.GRAB):go(this.interactiveCanvas,this.state)),this.setState({cursorButton:"up"}),this.savePointer(t.clientX,t.clientY,"up"),window.removeEventListener("pointermove",l),window.removeEventListener("pointerup",s),window.removeEventListener("blur",s),l.flush()});return window.addEventListener("blur",s),window.addEventListener("pointermove",l,{passive:!0}),window.addEventListener("pointerup",s),!0});C(this,"clearSelectionIfNotUsingSelection",()=>{this.state.activeTool.type!=="selection"&&this.setState({selectedElementIds:Ee({},this.state),selectedGroupIds:{},editingGroupId:null,activeEmbeddable:null})});C(this,"handleSelectionOnPointerDown",(t,r)=>{if(this.state.activeTool.type==="selection"){let n=this.scene.getNonDeletedElements(),i=this.scene.getNonDeletedElementsMap(),a=this.scene.getSelectedElements(this.state);if(a.length===1&&!this.state.editingLinearElement&&!ee(a[0])&&!(this.state.selectedLinearElement&&this.state.selectedLinearElement.hoverPointIndex!==-1)){let l=op(n,this.state,r.origin.x,r.origin.y,this.state.zoom,t.pointerType,this.scene.getNonDeletedElementsMap(),this.device);l!=null&&(l.transformHandleType==="rotation"?(this.setState({resizingElement:l.element}),r.resize.handleType=l.transformHandleType):(this.state.croppingElementId||this.setState({resizingElement:l.element}),r.resize.handleType=l.transformHandleType))}else a.length>1&&(r.resize.handleType=rp(Se(a),r.origin.x,r.origin.y,this.state.zoom,t.pointerType,this.device));if(r.resize.handleType)r.resize.isResizing=!0,r.resize.offset=pr(RE(r.resize.handleType,a,i,r.origin.x,r.origin.y)),a.length===1&&he(a[0])&&a[0].points.length===2&&(r.resize.arrowDirection=NE(r.resize.handleType,a[0]));else{if(this.state.selectedLinearElement){let c=this.state.editingLinearElement||this.state.selectedLinearElement,m=K.handlePointerDown(t,this,this.store,r.origin,c,this.scene);if(m.hitElement&&(r.hit.element=m.hitElement),m.linearElementEditor&&(this.setState({selectedLinearElement:m.linearElementEditor}),this.state.editingLinearElement&&this.setState({editingLinearElement:m.linearElementEditor})),m.didAddPoint)return!0}if(r.hit.element=r.hit.element??this.getElementAtPosition(r.origin.x,r.origin.y),this.hitLinkElement=this.getElementLinkAtPosition(r.origin,r.hit.element),this.hitLinkElement)return!0;if(this.state.croppingElementId&&r.hit.element?.id!==this.state.croppingElementId&&this.finishImageCropping(),r.hit.element&&this.getElementLinkAtPosition({x:r.origin.x,y:r.origin.y},r.hit.element))return!1;r.hit.allHitElements=this.getElementsAtPosition(r.origin.x,r.origin.y);let l=r.hit.element,s=r.hit.allHitElements.some(c=>this.isASelectedElement(c));if((l===null||!s)&&!t.shiftKey&&!r.hit.hasHitCommonBoundingBoxOfSelectedElements&&this.clearSelection(l),this.state.editingLinearElement)this.setState({selectedElementIds:Ee({[this.state.editingLinearElement.elementId]:!0},this.state)});else if(l!=null){if(t[y.CTRL_OR_CMD])return this.state.selectedElementIds[l.id]||(r.hit.wasAddedToSelection=!0),this.setState(c=>({...pf(c,l),previousSelectedElementIds:this.state.selectedElementIds})),!1;this.state.selectedElementIds[l.id]||(this.state.editingGroupId&&!Zn(l,this.state.editingGroupId)&&this.setState({selectedElementIds:Ee({},this.state),selectedGroupIds:{},editingGroupId:null,activeEmbeddable:null}),!s&&!r.hit.hasHitCommonBoundingBoxOfSelectedElements&&(this.setState(c=>{let m={...c.selectedElementIds,[l.id]:!0},d=[];if(Object.keys(c.selectedElementIds).forEach(p=>{let u=this.scene.getElement(p);u&&d.push(u)}),ie(l))ko(d,l.id).forEach(p=>{delete m[p.id]});else if(l.frameId)m[l.frameId]&&delete m[l.id];else{let p=l.groupIds,u=new Set(p.flatMap(h=>Le(this.scene.getNonDeletedElements(),h)).filter(h=>ie(h)).map(h=>h.id));u.size>0&&d.forEach(h=>{h.frameId&&u.has(h.frameId)&&(delete m[h.id],h.groupIds.flatMap(f=>Le(this.scene.getNonDeletedElements(),f)).forEach(f=>{delete m[f.id]}))})}return c.openDialog?.name==="elementLinkSelector"&&(l.groupIds.some(p=>c.selectedGroupIds[p])||(m={[l.id]:!0})),{...We({editingGroupId:c.editingGroupId,selectedElementIds:m},this.scene.getNonDeletedElements(),c,this),showHyperlinkPopup:l.link||Et(l)?"info":!1}}),r.hit.wasAddedToSelection=!0))}this.setState({previousSelectedElementIds:this.state.selectedElementIds})}}return!1});C(this,"handleTextOnPointerDown",(t,r)=>{if(this.state.editingTextElement)return;let n=r.origin.x,i=r.origin.y,a=this.getElementAtPosition(n,i,{includeBoundTextElement:!0}),l=this.getTextBindableContainerAtPosition(n,i);ut(a)&&(l=a,n=a.x+a.width/2,i=a.y+a.height/2),this.startTextEditing({sceneX:n,sceneY:i,insertAtParentCenter:!t.altKey,container:l,autoEdit:!1}),Zt(this.interactiveCanvas),this.state.activeTool.locked||this.setState({activeTool:Be(this.state,{type:"selection"})})});C(this,"handleFreeDrawElementOnPointerDown",(t,r,n)=>{let[i,a]=nt(n.origin.x,n.origin.y,null),l=this.getTopLayerFrameAtSceneCoords({x:i,y:a}),s=t.pressure===.5,c=rx({type:r,x:i,y:a,strokeColor:this.state.currentItemStrokeColor,backgroundColor:this.state.currentItemBackgroundColor,fillStyle:this.state.currentItemFillStyle,strokeWidth:this.state.currentItemStrokeWidth,strokeStyle:this.state.currentItemStrokeStyle,roughness:this.state.currentItemRoughness,opacity:this.state.currentItemOpacity,roundness:null,simulatePressure:s,locked:!1,frameId:l?l.id:null,points:[z(0,0)],pressures:s?[]:[t.pressure]});this.scene.insertElement(c),this.setState(d=>{let p={...d.selectedElementIds};return delete p[c.id],{selectedElementIds:Ee(p,d)}});let m=Er(n.origin,this.scene.getNonDeletedElements(),this.scene.getNonDeletedElementsMap(),this.state.zoom);this.setState({newElement:c,startBoundElement:m,suggestedBindings:[]})});C(this,"insertIframeElement",({sceneX:t,sceneY:r,width:n,height:i})=>{let[a,l]=nt(t,r,this.lastPointerDownEvent?.[y.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),s=tx({type:"iframe",x:a,y:l,strokeColor:"transparent",backgroundColor:"transparent",fillStyle:this.state.currentItemFillStyle,strokeWidth:this.state.currentItemStrokeWidth,strokeStyle:this.state.currentItemStrokeStyle,roughness:this.state.currentItemRoughness,roundness:this.getCurrentItemRoundness("iframe"),opacity:this.state.currentItemOpacity,locked:!1,width:n,height:i});return this.scene.insertElement(s),s});C(this,"insertEmbeddableElement",({sceneX:t,sceneY:r,link:n})=>{let[i,a]=nt(t,r,this.lastPointerDownEvent?.[y.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),l=dn(n);if(!l)return;l.error instanceof URIError&&this.setToast({message:g("toast.unrecognizedLinkFormat"),closable:!0});let s=km({type:"embeddable",x:i,y:a,strokeColor:"transparent",backgroundColor:"transparent",fillStyle:this.state.currentItemFillStyle,strokeWidth:this.state.currentItemStrokeWidth,strokeStyle:this.state.currentItemStrokeStyle,roughness:this.state.currentItemRoughness,roundness:this.getCurrentItemRoundness("embeddable"),opacity:this.state.currentItemOpacity,locked:!1,width:l.intrinsicSize.w,height:l.intrinsicSize.h,link:n});return this.scene.insertElement(s),s});C(this,"createImageElement",({sceneX:t,sceneY:r,addToFrameUnderCursor:n=!0})=>{let[i,a]=nt(t,r,this.lastPointerDownEvent?.[y.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),l=n?this.getTopLayerFrameAtSceneCoords({x:i,y:a}):null;return is({type:"image",x:i,y:a,strokeColor:this.state.currentItemStrokeColor,backgroundColor:this.state.currentItemBackgroundColor,fillStyle:this.state.currentItemFillStyle,strokeWidth:this.state.currentItemStrokeWidth,strokeStyle:this.state.currentItemStrokeStyle,roughness:this.state.currentItemRoughness,roundness:null,opacity:this.state.currentItemOpacity,locked:!1,frameId:l?l.id:null})});C(this,"handleLinearElementOnPointerDown",(t,r,n)=>{if(this.state.multiElement){let{multiElement:i}=this.state;if(i.type==="line"&&xa(i.points,this.state.zoom.value)){P(i,{lastCommittedPoint:i.points[i.points.length-1]}),this.actionManager.executeAction(Ht);return}if(ee(i)&&i.points.length>1){P(i,{lastCommittedPoint:i.points[i.points.length-1]}),this.actionManager.executeAction(Ht);return}let{x:a,y:l,lastCommittedPoint:s}=i;if(i.points.length>1&&s&&dr(z(n.origin.x-a,n.origin.y-l),s)<El){this.actionManager.executeAction(Ht);return}this.setState(c=>({selectedElementIds:Ee({...c.selectedElementIds,[i.id]:!0},c)})),P(i,{lastCommittedPoint:i.points[i.points.length-1]}),Te(this.interactiveCanvas,we.POINTER)}else{let[i,a]=nt(n.origin.x,n.origin.y,t[y.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),l=this.getTopLayerFrameAtSceneCoords({x:i,y:a}),{currentItemStartArrowhead:s,currentItemEndArrowhead:c}=this.state,[m,d]=r==="arrow"?[s,c]:[null,null],p=r==="arrow"?ni({type:r,x:i,y:a,strokeColor:this.state.currentItemStrokeColor,backgroundColor:this.state.currentItemBackgroundColor,fillStyle:this.state.currentItemFillStyle,strokeWidth:this.state.currentItemStrokeWidth,strokeStyle:this.state.currentItemStrokeStyle,roughness:this.state.currentItemRoughness,opacity:this.state.currentItemOpacity,roundness:this.state.currentItemArrowType===Je.round?{type:St.PROPORTIONAL_RADIUS}:null,startArrowhead:m,endArrowhead:d,locked:!1,frameId:l?l.id:null,elbowed:this.state.currentItemArrowType===Je.elbow,fixedSegments:this.state.currentItemArrowType===Je.elbow?[]:null}):ns({type:r,x:i,y:a,strokeColor:this.state.currentItemStrokeColor,backgroundColor:this.state.currentItemBackgroundColor,fillStyle:this.state.currentItemFillStyle,strokeWidth:this.state.currentItemStrokeWidth,strokeStyle:this.state.currentItemStrokeStyle,roughness:this.state.currentItemRoughness,opacity:this.state.currentItemOpacity,roundness:this.state.currentItemRoundness==="round"?{type:St.PROPORTIONAL_RADIUS}:null,locked:!1,frameId:l?l.id:null});this.setState(h=>{let f={...h.selectedElementIds};return delete f[p.id],{selectedElementIds:Ee(f,h)}}),P(p,{points:[...p.points,z(0,0)]});let u=Er(n.origin,this.scene.getNonDeletedElements(),this.scene.getNonDeletedElementsMap(),this.state.zoom,ee(p),ee(p));this.scene.insertElement(p),this.setState({newElement:p,startBoundElement:u,suggestedBindings:[]})}});C(this,"createGenericElementOnPointerDown",(t,r)=>{let[n,i]=nt(r.origin.x,r.origin.y,this.lastPointerDownEvent?.[y.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),a=this.getTopLayerFrameAtSceneCoords({x:n,y:i}),l={x:n,y:i,strokeColor:this.state.currentItemStrokeColor,backgroundColor:this.state.currentItemBackgroundColor,fillStyle:this.state.currentItemFillStyle,strokeWidth:this.state.currentItemStrokeWidth,strokeStyle:this.state.currentItemStrokeStyle,roughness:this.state.currentItemRoughness,opacity:this.state.currentItemOpacity,roundness:this.getCurrentItemRoundness(t),locked:!1,frameId:a?a.id:null},s;t==="embeddable"?s=km({type:"embeddable",...l}):s=ho({type:t,...l}),s.type==="selection"?this.setState({selectionElement:s}):(this.scene.insertElement(s),this.setState({multiElement:null,newElement:s}))});C(this,"createFrameElementOnPointerDown",(t,r)=>{let[n,i]=nt(t.origin.x,t.origin.y,this.lastPointerDownEvent?.[y.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),a={x:n,y:i,opacity:this.state.currentItemOpacity,locked:!1,...mo},l=r===kt.magicframe?ba(a):ri(a);this.scene.insertElement(l),this.setState({multiElement:null,newElement:l})});C(this,"restoreReadyToEraseElements",()=>{this.elementsPendingErasure=new Set,this.triggerRender()});C(this,"eraseElements",()=>{let t=!1,r=this.scene.getElementsIncludingDeleted().map(n=>this.elementsPendingErasure.has(n.id)||n.frameId&&this.elementsPendingErasure.has(n.frameId)||qe(n)&&this.elementsPendingErasure.has(n.containerId)?(t=!0,q(n,{isDeleted:!0})):n);this.elementsPendingErasure=new Set,t&&(this.store.shouldCaptureIncrement(),this.scene.replaceAllElements(r))});C(this,"initializeImage",async({imageFile:t,imageElement:r,showCursorImagePreview:n=!1})=>{if(!Es(t))throw new Error(g("errors.unsupportedFileType"));let i=t.type;if(Te(this.interactiveCanvas,"wait"),i===je.svg)try{t=Fm(Hm(await t.text()),t.name)}catch(m){throw console.warn(m),new Error(g("errors.svgImageInsertError"))}let a=await(this.props.generateIdForFile?.(t)||Mx(t));if(!a)throw console.warn("Couldn't generate file id or the supplied `generateIdForFile` didn't resolve to one."),new Error(g("errors.imageInsertError"));if(!this.files[a]?.dataURL){try{t=await wa(t,{maxWidthOrHeight:Lh})}catch(m){console.error("Error trying to resizing image file on insertion",m)}if(t.size>Zd)throw new Error(g("errors.fileTooBig",{maxSize:`${Math.trunc(Zd/1024/1024)}MB`}))}if(n){let m=this.files[a]?.dataURL,d=m&&Px(m);this.setImagePreviewCursor(d||t)}let s=this.files[a]?.dataURL||await vs(t),c=P(r,{fileId:a},!1);return new Promise(async(m,d)=>{try{this.addMissingFiles([{mimeType:i,id:a,dataURL:s,created:Date.now(),lastRetrieved:Date.now()}]);let p=this.imageCache.get(a);p||(this.addNewImagesToImageCache(),await this.updateImageCache([c])),p?.image instanceof Promise&&await p.image,this.state.pendingImageElementId!==c.id&&this.state.newElement?.id!==c.id&&this.initializeImageDimensions(c,!0),m(c)}catch(p){console.error(p),d(new Error(g("errors.imageInsertError")))}finally{n||Zt(this.interactiveCanvas)}})});C(this,"insertImageElement",async(t,r,n)=>{if(!this.isToolSupported("image")){this.setState({errorMessage:g("errors.imageToolNotSupported")});return}this.scene.insertElement(t);try{return await this.initializeImage({imageFile:r,imageElement:t,showCursorImagePreview:n})}catch(i){return P(t,{isDeleted:!0}),this.actionManager.executeAction(Ht),this.setState({errorMessage:i.message||g("errors.imageInsertError")}),null}});C(this,"setImagePreviewCursor",async t=>{let n;try{n=await wa(t,{maxWidthOrHeight:96})}catch(a){throw a.cause==="UNSUPPORTED"?new Error(g("errors.unsupportedFileType")):a}let i=await vs(n);if(t.type===je.svg){let a=await zx(i),l=Math.min(a.height,96),s=l*(a.width/a.height);s>96&&(s=96,l=s*(a.height/a.width));let c=document.createElement("canvas");c.height=l,c.width=s,c.getContext("2d").drawImage(a,0,0,s,l),i=c.toDataURL(je.svg)}this.state.pendingImageElementId&&Te(this.interactiveCanvas,`url(${i}) 4 4, auto`)});C(this,"onImageAction",async({insertOnCanvasDirectly:t})=>{try{let r=this.state.width/2+this.state.offsetLeft,n=this.state.height/2+this.state.offsetTop,{x:i,y:a}=Re({clientX:r,clientY:n},this.state),l=await bs({description:"Image",extensions:Object.keys(ra)}),s=this.createImageElement({sceneX:i,sceneY:a,addToFrameUnderCursor:!1});t?(this.insertImageElement(s,l),this.initializeImageDimensions(s),this.setState({selectedElementIds:Ee({[s.id]:!0},this.state)},()=>{this.actionManager.executeAction(Ht)})):this.setState({pendingImageElementId:s.id},()=>{this.insertImageElement(s,l,!0)})}catch(r){r.name!=="AbortError"?console.error(r):console.warn(r),this.setState({pendingImageElementId:null,newElement:null,activeTool:Be(this.state,{type:"selection"})},()=>{this.actionManager.executeAction(Ht)})}});C(this,"initializeImageDimensions",(t,r=!1)=>{let n=qr(t)&&this.imageCache.get(t.fileId)?.image;if(!n||n instanceof Promise){if(t.width<Vr/this.state.zoom.value&&t.height<Vr/this.state.zoom.value){let i=100/this.state.zoom.value;P(t,{x:t.x-i/2,y:t.y-i/2,width:i,height:i})}return}if(r||t.width<Vr/this.state.zoom.value&&t.height<Vr/this.state.zoom.value){let i=Math.max(this.state.height-120,160),a=Math.min(i,Math.floor(this.state.height*.5)/this.state.zoom.value),l=Math.min(n.naturalHeight,a),s=l*(n.naturalWidth/n.naturalHeight),c=t.x+t.width/2-s/2,m=t.y+t.height/2-l/2;P(t,{x:c,y:m,width:s,height:l,crop:null})}});C(this,"updateImageCache",async(t,r=this.files)=>{let{updatedFiles:n,erroredFiles:i}=await Ux({imageCache:this.imageCache,fileIds:t.map(a=>a.fileId),files:r});if(n.size||i.size)for(let a of t)n.has(a.fileId)&&fr.delete(a);return i.size&&this.scene.replaceAllElements(this.scene.getElementsIncludingDeleted().map(a=>qr(a)&&i.has(a.fileId)?q(a,{status:"error"}):a)),{updatedFiles:n,erroredFiles:i}});C(this,"addNewImagesToImageCache",async(t=Hx(this.scene.getNonDeletedElements()),r=this.files)=>{let n=t.filter(i=>!i.isDeleted&&!this.imageCache.has(i.fileId));if(n.length){let{updatedFiles:i}=await this.updateImageCache(n,r);i.size&&this.scene.triggerUpdate()}});C(this,"scheduleImageRefresh",eM(()=>{this.addNewImagesToImageCache()},xh));C(this,"updateBindingEnabledOnPointerMove",t=>{let r=bx(t);this.state.isBindingEnabled!==r&&this.setState({isBindingEnabled:r})});C(this,"maybeSuggestBindingAtCursor",(t,r)=>{let n=Er(t,this.scene.getNonDeletedElements(),this.scene.getNonDeletedElementsMap(),this.state.zoom,!1,r);this.setState({suggestedBindings:n!=null?[n]:[]})});C(this,"maybeSuggestBindingsForLinearElementAtCoords",(t,r,n)=>{if(!r.length)return;let i=r.reduce((a,l)=>{let s=Er(l,this.scene.getNonDeletedElements(),this.scene.getNonDeletedElementsMap(),this.state.zoom,ee(t),ee(t));return s!=null&&!yx(t,n?.id,s)&&a.push(s),a},[]);this.setState({suggestedBindings:i})});C(this,"handleInteractiveCanvasRef",t=>{t!==null?(this.interactiveCanvas=t,this.interactiveCanvas.addEventListener("touchstart",this.onTouchStart,{passive:!1}),this.interactiveCanvas.addEventListener("touchend",this.onTouchEnd)):(this.interactiveCanvas?.removeEventListener("touchstart",this.onTouchStart),this.interactiveCanvas?.removeEventListener("touchend",this.onTouchEnd))});C(this,"handleAppOnDrop",async t=>{let{file:r,fileHandle:n}=await Ox(t),{x:i,y:a}=Re(t,this.state);try{if(Es(r)&&this.isToolSupported("image")){if(r?.type===je.png||r?.type===je.svg)try{let c=await ys(r,this.state,this.scene.getElementsIncludingDeleted(),n);this.syncActionResult({...c,appState:{...c.appState||this.state,isLoading:!1},replaceFiles:!0,captureUpdate:L.IMMEDIATELY});return}catch(c){if(c.name!=="EncodingError")throw new Error(g("alerts.couldNotLoadInvalidFile"))}let s=this.createImageElement({sceneX:i,sceneY:a});this.insertImageElement(s,r),this.initializeImageDimensions(s),this.setState({selectedElementIds:Ee({[s.id]:!0},this.state)});return}}catch(s){return this.setState({isLoading:!1,errorMessage:s.message})}let l=t.dataTransfer.getData(je.excalidrawlib);if(l&&typeof l=="string"){try{let s=_x(l);this.addElementsFromPasteOrLibrary({elements:_c(s),position:t,files:null})}catch(s){this.setState({errorMessage:s.message})}return}if(r&&await this.loadFileToCanvas(r,n),t.dataTransfer?.types?.includes("text/plain")){let s=t.dataTransfer?.getData("text");if(s&&li(s,this.props.validateEmbeddable)&&(/^(http|https):\/\/[^\s/$.?#].[^\s]*$/.test(s)||dn(s)?.type==="video")){let c=this.insertEmbeddableElement({sceneX:i,sceneY:a,link:uo(s)});c&&this.setState({selectedElementIds:{[c.id]:!0}})}}});C(this,"loadFileToCanvas",async(t,r)=>{t=await Fx(t);try{let n=this.scene.getElementsIncludingDeleted(),i;try{i=await Nm(t,this.state,n,r)}catch(a){let l=a instanceof tf;if(l&&a.code==="IMAGE_NOT_CONTAINS_SCENE_DATA"&&!this.isToolSupported("image")){this.setState({isLoading:!1,errorMessage:g("errors.imageToolNotSupported")});return}let s=l?g("alerts.cannotRestoreFromImage"):g("alerts.couldNotLoadInvalidFile");this.setState({isLoading:!1,errorMessage:s})}if(!i)return;i.type===je.excalidraw?(Jo(n.concat(i.data.elements)),this.store.updateSnapshot(Q(n),this.state),this.setState({isLoading:!0}),this.syncActionResult({...i.data,appState:{...i.data.appState||this.state,isLoading:!1},replaceFiles:!0,captureUpdate:L.IMMEDIATELY})):i.type===je.excalidrawlib&&await this.library.updateLibrary({libraryItems:t,merge:!0,openLibraryMenu:!0}).catch(a=>{console.error(a),this.setState({errorMessage:g("errors.importLibraryError")})})}catch(n){this.setState({isLoading:!1,errorMessage:n.message})}});C(this,"handleCanvasContextMenu",t=>{if(t.preventDefault(),("pointerType"in t.nativeEvent&&t.nativeEvent.pointerType==="touch"||"pointerType"in t.nativeEvent&&t.nativeEvent.pointerType==="pen"&&t.button!==To.SECONDARY)&&this.state.activeTool.type!=="selection")return;let{x:r,y:n}=Re(t,this.state),i=this.getElementAtPosition(r,n,{preferSelected:!0,includeLockedElements:!0}),a=this.scene.getSelectedElements(this.state),l=this.isHittingCommonBoundingBoxOfSelectedElements({x:r,y:n},a),s=i||l?"element":"canvas",c=this.excalidrawContainerRef.current,{top:m,left:d}=c.getBoundingClientRect(),p=t.clientX-d,u=t.clientY-m;le("contextMenu","openContextMenu",s),this.setState({...i&&!this.state.selectedElementIds[i.id]?{...this.state,...We({editingGroupId:this.state.editingGroupId,selectedElementIds:{[i.id]:!0}},this.scene.getNonDeletedElements(),this.state,this),selectedLinearElement:he(i)?new K(i):null}:this.state,showHyperlinkPopup:!1},()=>{this.setState({contextMenu:{top:u,left:p,items:this.getContextMenuItems(s)}})})});C(this,"maybeDragNewGenericElement",(t,r,n=!0)=>{let i=this.state.selectionElement,a=t.lastCoords;if(i&&this.state.activeTool.type!=="eraser"){ip({newElement:i,elementType:this.state.activeTool.type,originX:t.origin.x,originY:t.origin.y,x:a.x,y:a.y,width:jr(t.origin.x,a.x),height:jr(t.origin.y,a.y),shouldMaintainAspectRatio:ii(r),shouldResizeFromCenter:cs(r),zoom:this.state.zoom.value,informMutation:n});return}let l=this.state.newElement;if(!l)return;let[s,c]=nt(a.x,a.y,r[y.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),m=qr(l)&&this.imageCache.get(l.fileId)?.image,d=m&&!(m instanceof Promise)?m.width/m.height:null;this.maybeCacheReferenceSnapPoints(r,[l]);let{snapOffset:p,snapLines:u}=gE(l,this,r,{x:t.originInGrid.x+(this.state.originSnapOffset?.x??0),y:t.originInGrid.y+(this.state.originSnapOffset?.y??0)},{x:s-t.originInGrid.x,y:c-t.originInGrid.y},this.scene.getNonDeletedElementsMap());s+=p.x,c+=p.y,this.setState({snapLines:u}),ip({newElement:l,elementType:this.state.activeTool.type,originX:t.originInGrid.x,originY:t.originInGrid.y,x:s,y:c,width:jr(t.originInGrid.x,s),height:jr(t.originInGrid.y,c),shouldMaintainAspectRatio:xe(l)?!ii(r):ii(r),shouldResizeFromCenter:cs(r),zoom:this.state.zoom.value,widthAspectRatio:d,originOffset:this.state.originSnapOffset,informMutation:n}),this.setState({newElement:l}),(this.state.activeTool.type===kt.frame||this.state.activeTool.type===kt.magicframe)&&this.setState({elementsToHighlight:di(this.scene.getNonDeletedElements(),l,this.state,this.scene.getNonDeletedElementsMap())})});C(this,"maybeHandleCrop",(t,r)=>{if(!this.state.croppingElementId)return!1;let n=t.resize.handleType,i=t.lastCoords,[a,l]=nt(i.x-t.resize.offset.x,i.y-t.resize.offset.y,r[y.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),s=this.scene.getNonDeletedElementsMap().get(this.state.croppingElementId);if(n&&s&&xe(s)){let c=t.originalElements.get(s.id),m=qr(s)&&this.imageCache.get(s.fileId)?.image;if(c&&xe(c)&&m&&!(m instanceof Promise)){let[d,p]=nt(i.x,i.y,r[y.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),u={x:d-t.originInGrid.x,y:p-t.originInGrid.y};this.maybeCacheReferenceSnapPoints(r,[s]);let{snapOffset:h,snapLines:f}=Jm([s],[c],this,r,u,n);P(s,Cx(s,n,m.naturalWidth,m.naturalHeight,a+h.x,l+h.y,r.shiftKey?c.width/c.height:void 0)),Jt(s,this.scene.getNonDeletedElementsMap(),{newSize:{width:s.width,height:s.height}}),this.setState({isCropping:n&&n!=="rotation",snapLines:f})}return!0}return!1});C(this,"maybeHandleResize",(t,r)=>{let n=this.scene.getSelectedElements(this.state),i=n.filter(d=>ie(d)),a=t.resize.handleType;if(i.length>0&&a==="rotation"||n.length===1&&ee(n[0])||this.state.croppingElementId)return!1;this.setState({isResizing:a&&a!=="rotation",isRotating:a==="rotation",activeEmbeddable:null});let l=t.lastCoords,[s,c]=nt(l.x-t.resize.offset.x,l.y-t.resize.offset.y,r[y.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),m=new Map;if(i.forEach(d=>{ko(this.scene.getNonDeletedElements(),d.id).forEach(u=>{m.set(d.id+u.id,{x:u.x-d.x,y:u.y-d.y})})}),!this.state.selectedElementsAreBeingDragged){let[d,p]=nt(l.x,l.y,r[y.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),u={x:d-t.originInGrid.x,y:p-t.originInGrid.y},h=[...t.originalElements.values()];this.maybeCacheReferenceSnapPoints(r,n);let{snapOffset:f,snapLines:b}=Jm(n,$(h,this.state),this,r,u,a);s+=f.x,c+=f.y,this.setState({snapLines:b})}if(DE(t.originalElements,a,n,this.scene.getElementsMapIncludingDeleted(),this.scene,ds(r),cs(r),n.some(d=>xe(d))?!ii(r):ii(r),s,c,t.resize.center.x,t.resize.center.y)){let d=gs(n,this.scene.getNonDeletedElementsMap(),this.state.zoom),p=new Set;return i.forEach(u=>{di(this.scene.getNonDeletedElements(),u,this.state,this.scene.getNonDeletedElementsMap()).forEach(h=>p.add(h))}),this.setState({elementsToHighlight:[...p],suggestedBindings:d}),!0}return!1});C(this,"getContextMenuItems",t=>{let r=[];return r.push(wc,vc),t==="canvas"?this.state.viewModeEnabled?[...r,Cc,Mi,wg,Di]:[Qp,$e,wc,vc,Tc,$e,bp,Cv,$e,Cc,eu,Mi,wg,Di]:(r.push(Tc),this.state.viewModeEnabled?[_i,...r]:[$e,yc,_i,Qp,$e,N1,O1,F1,$e,Du,$e,...r,$e,Wp,Kp,$e,Xp,aT,tu,ou,fv,$p,$e,jp,$e,up,gp,hp,fp,$e,Jp,qp,$e,Mu,$e,Ga,Vc,$e,xp,cu,$e,_a])});C(this,"handleWheel",Fe(t=>{if(!(t.target instanceof HTMLCanvasElement||t.target instanceof HTMLTextAreaElement||t.target instanceof HTMLIFrameElement)){t[y.CTRL_OR_CMD]&&t.preventDefault();return}if(t.preventDefault(),ll)return;let{deltaX:r,deltaY:n}=t;if(t.metaKey||t.ctrlKey){let i=Math.sign(n),a=Fn*100,l=Math.abs(n),s=n;l>a&&(s=a*i);let c=this.state.zoom.value-s/100;c+=Math.log10(Math.max(1,this.state.zoom.value))*-i*Math.min(1,l/20),this.translateCanvas(m=>({...Qo({viewportX:this.lastViewportPosition.x,viewportY:this.lastViewportPosition.y,nextZoom:Ao(c)},m),shouldCacheIgnoreZoom:!0})),this.resetShouldCacheIgnoreZoomDebounced();return}if(t.shiftKey){this.translateCanvas(({zoom:i,scrollX:a})=>({scrollX:a-(n||r)/i.value}));return}this.translateCanvas(({zoom:i,scrollX:a,scrollY:l})=>({scrollX:a-r/i.value,scrollY:l-n/i.value}))}));C(this,"savePointer",(t,r,n)=>{if(!t||!r)return;let{x:i,y:a}=Re({clientX:t,clientY:r},this.state);isNaN(i)||isNaN(a);let l={x:i,y:a,tool:this.state.activeTool.type==="laser"?"laser":"pointer"};this.props.onPointerUpdate?.({pointer:l,button:n,pointersMap:fe.pointers})});C(this,"resetShouldCacheIgnoreZoomDebounced",$r(()=>{this.unmounted||this.setState({shouldCacheIgnoreZoom:!1})},300));C(this,"updateDOMRect",t=>{if(this.excalidrawContainerRef?.current){let r=this.excalidrawContainerRef.current,{width:n,height:i,left:a,top:l}=r.getBoundingClientRect(),{width:s,height:c,offsetTop:m,offsetLeft:d}=this.state;if(n===s&&i===c&&a===d&&l===m){t&&t();return}this.setState({width:n,height:i,offsetLeft:a,offsetTop:l},()=>{t&&t()})}});C(this,"refresh",()=>{this.setState({...this.getCanvasOffsets()})});let r=$n(),{excalidrawAPI:n,viewModeEnabled:i=!1,zenModeEnabled:a=!1,gridModeEnabled:l=!1,objectsSnapModeEnabled:s=!1,theme:c=r.theme,name:m=`${g("labels.untitled")}-${om()}`}=t;if(this.state={...r,theme:c,isLoading:!0,...this.getCanvasOffsets(),viewModeEnabled:i,zenModeEnabled:a,objectsSnapModeEnabled:s,gridModeEnabled:l??r.gridModeEnabled,name:m,width:window.innerWidth,height:window.innerHeight},this.id=Q5(),this.library=new Ov(this),this.actionManager=new $c(this.syncActionResult,()=>this.state,()=>this.scene.getElementsIncludingDeleted(),this),this.scene=new bo,this.canvas=document.createElement("canvas"),this.rc=q5.canvas(this.canvas),this.renderer=new il(this.scene),this.visibleElements=[],this.store=new wx,this.history=new Xa,n){let d={updateScene:this.updateScene,updateLibrary:this.library.updateLibrary,addFiles:this.addFiles,resetScene:this.resetScene,getSceneElementsIncludingDeleted:this.getSceneElementsIncludingDeleted,history:{clear:this.resetHistory},scrollToContent:this.scrollToContent,getSceneElements:this.getSceneElements,getAppState:()=>this.state,getFiles:()=>this.files,getName:this.getName,registerAction:p=>{this.actionManager.registerAction(p)},refresh:this.refresh,setToast:this.setToast,id:this.id,setActiveTool:this.setActiveTool,setCursor:this.setCursor,resetCursor:this.resetCursor,updateFrameRendering:this.updateFrameRendering,toggleSidebar:this.toggleSidebar,onChange:p=>this.onChangeEmitter.on(p),onPointerDown:p=>this.onPointerDownEmitter.on(p),onPointerUp:p=>this.onPointerUpEmitter.on(p),onScrollChange:p=>this.onScrollChangeEmitter.on(p),onUserFollow:p=>this.onUserFollowEmitter.on(p)};typeof n=="function"?n(d):console.error("excalidrawAPI should be a function!")}this.excalidrawContainerValue={container:this.excalidrawContainerRef.current,id:this.id},this.fonts=new br(this.scene),this.history=new Xa,this.actionManager.registerAll(bf),this.actionManager.registerAction(Aw(this.history,this.store)),this.actionManager.registerAction(_w(this.history,this.store))}onWindowMessage(t){if(t.origin!=="https://player.vimeo.com"&&t.origin!=="https://www.youtube.com")return;let r=null;try{r=JSON.parse(t.data)}catch{}if(r)switch(t.origin){case"https://player.vimeo.com":if(r.method==="paused"){let n=null,i=document.body.querySelectorAll("iframe.excalidraw__embeddable");if(!i)break;for(let a of i)a.contentWindow===t.source&&(n=a.contentWindow);n?.postMessage(JSON.stringify({method:r.value?"play":"pause",value:!0}),"*")}break;case"https://www.youtube.com":if(r.event==="infoDelivery"&&r.info&&r.id&&typeof r.info.playerState=="number"){let n=r.id,i=r.info.playerState;Object.values(ta).includes(i)&&Rg.set(n,i)}break}}cacheEmbeddableRef(t,r){r&&this.iFrameRefs.set(t.id,r)}getHTMLIFrameElement(t){return this.iFrameRefs.get(t.id)}handleEmbeddableCenterClick(t){if(this.state.activeEmbeddable?.element===t&&this.state.activeEmbeddable?.state==="active"||(setTimeout(()=>{this.setState({activeEmbeddable:{element:t,state:"active"},selectedElementIds:{[t.id]:!0},newElement:null,selectionElement:null})},100),Qr(t)))return;let r=this.getHTMLIFrameElement(t);if(r?.contentWindow){if(r.src.includes("youtube")){let n=Rg.get(t.id);switch(n||(Rg.set(t.id,ta.UNSTARTED),r.contentWindow.postMessage(JSON.stringify({event:"listening",id:t.id}),"*")),n){case ta.PLAYING:case ta.BUFFERING:r.contentWindow?.postMessage(JSON.stringify({event:"command",func:"pauseVideo",args:""}),"*");break;default:r.contentWindow?.postMessage(JSON.stringify({event:"command",func:"playVideo",args:""}),"*")}}r.src.includes("player.vimeo.com")&&r.contentWindow.postMessage(JSON.stringify({method:"paused"}),"*")}}isIframeLikeElementCenter(t,r,n,i){return t&&!r.altKey&&!r.shiftKey&&!r.metaKey&&!r.ctrlKey&&(this.state.activeEmbeddable?.element!==t||this.state.activeEmbeddable?.state==="hover"||!this.state.activeEmbeddable)&&n>=t.x+t.width/3&&n<=t.x+2*t.width/3&&i>=t.y+t.height/3&&i<=t.y+2*t.height/3}renderEmbeddables(){let t=this.state.zoom.value,r=this.state.width,n=this.state.height,i=this.scene.getNonDeletedElements().filter(a=>Et(a)&&(this.embedsValidationStatus.get(a.id)===!0||this.props.renderEmbeddable?.(a,this.state)!=null)||Qr(a));return Ie(oM,{children:i.map(a=>{let{x:l,y:s}=xt({sceneX:a.x,sceneY:a.y},this.state),c=ka(a,r,n,this.state,this.scene.getNonDeletedElementsMap()),m=this.initializedEmbeds.has(a.id);if(c&&!m&&this.initializedEmbeds.add(a.id),!(c||m))return null;let p;if(Qr(a)){p=null;let f=(a.customData?.generationData??this.magicGenerations.get(a.id))||{status:"error",message:"No generation data",code:"ERR_NO_GENERATION_DATA"};if(f.status==="done"){let b=f.html;p={intrinsicSize:{w:a.width,h:a.height},type:"document",srcdoc:()=>b}}else if(f.status==="pending")p={intrinsicSize:{w:a.width,h:a.height},type:"document",srcdoc:()=>_m(`
<style>
html, body {
width: 100%;