@excalidraw/common 0.18.0-1b287a8ba → 0.18.0-3085f4a

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/dist/dev/index.js +9 -1
  2. package/dist/dev/index.js.map +2 -2
  3. package/dist/prod/index.js +3 -3
  4. package/dist/types/common/src/constants.d.ts +3 -0
  5. package/dist/types/element/src/Scene.d.ts +6 -2
  6. package/dist/types/element/src/delta.d.ts +16 -4
  7. package/dist/types/element/src/linearElementEditor.d.ts +2 -1
  8. package/dist/types/element/src/store.d.ts +6 -1
  9. package/dist/types/excalidraw/actions/actionAddToLibrary.d.ts +0 -3
  10. package/dist/types/excalidraw/actions/actionBoundText.d.ts +0 -2
  11. package/dist/types/excalidraw/actions/actionCanvas.d.ts +15 -14
  12. package/dist/types/excalidraw/actions/actionClipboard.d.ts +3 -8
  13. package/dist/types/excalidraw/actions/actionCropEditor.d.ts +0 -1
  14. package/dist/types/excalidraw/actions/actionDeleteSelected.d.ts +3 -6
  15. package/dist/types/excalidraw/actions/actionElementLink.d.ts +0 -1
  16. package/dist/types/excalidraw/actions/actionElementLock.d.ts +0 -2
  17. package/dist/types/excalidraw/actions/actionEmbeddable.d.ts +0 -1
  18. package/dist/types/excalidraw/actions/actionExport.d.ts +0 -9
  19. package/dist/types/excalidraw/actions/actionFinalize.d.ts +2 -3
  20. package/dist/types/excalidraw/actions/actionFrame.d.ts +0 -4
  21. package/dist/types/excalidraw/actions/actionGroup.d.ts +0 -2
  22. package/dist/types/excalidraw/actions/actionLinearEditor.d.ts +33 -3
  23. package/dist/types/excalidraw/actions/actionLink.d.ts +0 -1
  24. package/dist/types/excalidraw/actions/actionMenu.d.ts +0 -3
  25. package/dist/types/excalidraw/actions/actionNavigate.d.ts +0 -2
  26. package/dist/types/excalidraw/actions/actionProperties.d.ts +0 -15
  27. package/dist/types/excalidraw/actions/actionSelectAll.d.ts +0 -1
  28. package/dist/types/excalidraw/actions/actionStyles.d.ts +0 -1
  29. package/dist/types/excalidraw/actions/actionToggleGridMode.d.ts +0 -1
  30. package/dist/types/excalidraw/actions/actionToggleObjectsSnapMode.d.ts +0 -1
  31. package/dist/types/excalidraw/actions/actionToggleSearchMenu.d.ts +0 -1
  32. package/dist/types/excalidraw/actions/actionToggleStats.d.ts +0 -1
  33. package/dist/types/excalidraw/actions/actionToggleViewMode.d.ts +0 -1
  34. package/dist/types/excalidraw/actions/actionToggleZenMode.d.ts +0 -1
  35. package/dist/types/excalidraw/components/Actions.d.ts +0 -4
  36. package/dist/types/excalidraw/components/App.d.ts +7 -2
  37. package/dist/types/excalidraw/components/shapes.d.ts +129 -1
  38. package/dist/types/excalidraw/data/reconcile.d.ts +1 -0
  39. package/dist/types/excalidraw/data/restore.d.ts +6 -1
  40. package/dist/types/excalidraw/index.d.ts +1 -1
  41. package/dist/types/excalidraw/renderer/staticScene.d.ts +4 -1
  42. package/dist/types/excalidraw/types.d.ts +7 -4
  43. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- var he=Object.create;var Y=Object.defineProperty;var ye=Object.getOwnPropertyDescriptor;var ge=Object.getOwnPropertyNames;var Le=Object.getPrototypeOf,Se=Object.prototype.hasOwnProperty;var Oe=(e,t)=>()=>(e&&(t=e(e=0)),t);var V=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Re=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of ge(t))!Se.call(e,s)&&s!==n&&Y(e,s,{get:()=>t[s],enumerable:!(r=ye(t,s))||r.enumerable});return e};var X=(e,t,n)=>(n=e!=null?he(Le(e)):{},Re(t||!e||!e.__esModule?Y(n,"default",{value:e,enumerable:!0}):n,e));var f,c=Oe(()=>{f={PROD:!0}});var le=V((G,ae)=>{c();(function(e,t){typeof define=="function"&&define.amd?define([],t):typeof G=="object"?ae.exports=t():(e.PromisePool=t(),e.promisePool=e.PromisePool)})(G,function(){"use strict";var e=function(){this._listeners={}};e.prototype.addEventListener=function(o,a){this._listeners[o]=this._listeners[o]||[],this._listeners[o].indexOf(a)<0&&this._listeners[o].push(a)},e.prototype.removeEventListener=function(o,a){if(this._listeners[o]){var p=this._listeners[o].indexOf(a);p>=0&&this._listeners[o].splice(p,1)}},e.prototype.dispatchEvent=function(o){if(this._listeners[o.type]&&this._listeners[o.type].length)for(var a=this._listeners[o.type].slice(),p=0,m=a.length;p<m;++p)a[p].call(this,o)};var t=function(o){return typeof o.constructor=="function"&&o.constructor.name==="GeneratorFunction"},n=function(o){return{next:function(){var a=o();return a?{value:a}:{done:!0}}}},r=function(o){var a=!1;return{next:function(){return a?{done:!0}:(a=!0,{value:o})}}},s=function(o,a){var p=typeof o;if(p==="object"){if(typeof o.next=="function")return o;if(typeof o.then=="function")return r(o)}return p==="function"?t(o)?o():n(o):r(a.resolve(o))},l=function(o,a,p){this.target=o,this.type=a,this.data=p},i=function(o,a,p){if(e.call(this),typeof a!="number"||Math.floor(a)!==a||a<1)throw new Error("Invalid concurrency");this._concurrency=a,this._options=p||{},this._options.promise=this._options.promise||Promise,this._iterator=s(o,this._options.promise),this._done=!1,this._size=0,this._promise=null,this._callbacks=null};return i.prototype=new e,i.prototype.constructor=i,i.prototype.concurrency=function(o){return typeof o<"u"&&(this._concurrency=o,this.active()&&this._proceed()),this._concurrency},i.prototype.size=function(){return this._size},i.prototype.active=function(){return!!this._promise},i.prototype.promise=function(){return this._promise},i.prototype.start=function(){var o=this,a=this._options.promise;return this._promise=new a(function(p,m){o._callbacks={reject:m,resolve:p},o._proceed()}),this._promise},i.prototype._fireEvent=function(o,a){this.dispatchEvent(new l(this,o,a))},i.prototype._settle=function(o){o?this._callbacks.reject(o):this._callbacks.resolve(),this._promise=null,this._callbacks=null},i.prototype._onPooledPromiseFulfilled=function(o,a){this._size--,this.active()&&(this._fireEvent("fulfilled",{promise:o,result:a}),this._proceed())},i.prototype._onPooledPromiseRejected=function(o,a){this._size--,this.active()&&(this._fireEvent("rejected",{promise:o,error:a}),this._settle(a||new Error("Unknown error")))},i.prototype._trackPromise=function(o){var a=this;o.then(function(p){a._onPooledPromiseFulfilled(o,p)},function(p){a._onPooledPromiseRejected(o,p)}).catch(function(p){a._settle(new Error("Promise processing failed: "+p))})},i.prototype._proceed=function(){if(!this._done){for(var o={done:!1};this._size<this._concurrency&&!(o=this._iterator.next()).done;)this._size++,this._trackPromise(o.value);this._done=o===null||!!o.done}this._done&&this._size===0&&this._settle()},i.PromisePoolEvent=l,i.PromisePool=i,i})});var be=V(U=>{"use strict";c();Object.defineProperty(U,"__esModule",{value:!0});U.sanitizeUrl=void 0;var tt=/^([^\w]*)(javascript|data|vbscript)/im,nt=/&#(\w+)(^\w|;)?/g,rt=/&(newline|tab);/gi,ot=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim,st=/^.+(:|&colon;)/gim,it=[".","/"];function at(e){return it.indexOf(e[0])>-1}function lt(e){return e.replace(nt,function(t,n){return String.fromCharCode(n)})}function ct(e){var t=lt(e||"").replace(rt,"").replace(ot,"").trim();if(!t)return"about:blank";if(at(t))return t;var n=t.match(st);if(!n)return t;var r=n[0];return tt.test(r)?"about:blank":t}U.sanitizeUrl=ct});c();c();var $=class{constructor(t){this.scoreFunction=t}content=[];sinkDown(t){let n=this.content[t];for(;t>0;){let r=(t+1>>1)-1,s=this.content[r];if(this.scoreFunction(n)<this.scoreFunction(s))this.content[r]=n,this.content[t]=s,t=r;else break}}bubbleUp(t){let n=this.content.length,r=this.content[t],s=this.scoreFunction(r);for(;;){let l=t+1<<1,i=l-1,o=null,a=0;if(i<n){let p=this.content[i];a=this.scoreFunction(p),a<s&&(o=i)}if(l<n){let p=this.content[l];this.scoreFunction(p)<(o===null?s:a)&&(o=l)}if(o!==null)this.content[t]=this.content[o],this.content[o]=r,t=o;else break}}push(t){this.content.push(t),this.sinkDown(this.content.length-1)}pop(){if(this.content.length===0)return null;let t=this.content[0],n=this.content.pop();return this.content.length>0&&(this.content[0]=n,this.bubbleUp(0)),t}remove(t){if(this.content.length===0)return;let n=this.content.indexOf(t),r=this.content.pop();n<this.content.length&&(this.content[n]=r,this.scoreFunction(r)<this.scoreFunction(t)?this.sinkDown(n):this.bubbleUp(n))}size(){return this.content.length}rescoreElement(t){this.sinkDown(this.content.indexOf(t))}};c();var z={white:"#ffffff",black:"#000000",gray:["#f8f9fa","#f1f3f5","#e9ecef","#dee2e6","#ced4da","#adb5bd","#868e96","#495057","#343a40","#212529"],red:["#fff5f5","#ffe3e3","#ffc9c9","#ffa8a8","#ff8787","#ff6b6b","#fa5252","#f03e3e","#e03131","#c92a2a"],pink:["#fff0f6","#ffdeeb","#fcc2d7","#faa2c1","#f783ac","#f06595","#e64980","#d6336c","#c2255c","#a61e4d"],grape:["#f8f0fc","#f3d9fa","#eebefa","#e599f7","#da77f2","#cc5de8","#be4bdb","#ae3ec9","#9c36b5","#862e9c"],violet:["#f3f0ff","#e5dbff","#d0bfff","#b197fc","#9775fa","#845ef7","#7950f2","#7048e8","#6741d9","#5f3dc4"],indigo:["#edf2ff","#dbe4ff","#bac8ff","#91a7ff","#748ffc","#5c7cfa","#4c6ef5","#4263eb","#3b5bdb","#364fc7"],blue:["#e7f5ff","#d0ebff","#a5d8ff","#74c0fc","#4dabf7","#339af0","#228be6","#1c7ed6","#1971c2","#1864ab"],cyan:["#e3fafc","#c5f6fa","#99e9f2","#66d9e8","#3bc9db","#22b8cf","#15aabf","#1098ad","#0c8599","#0b7285"],teal:["#e6fcf5","#c3fae8","#96f2d7","#63e6be","#38d9a9","#20c997","#12b886","#0ca678","#099268","#087f5b"],green:["#ebfbee","#d3f9d8","#b2f2bb","#8ce99a","#69db7c","#51cf66","#40c057","#37b24d","#2f9e44","#2b8a3e"],lime:["#f4fce3","#e9fac8","#d8f5a2","#c0eb75","#a9e34b","#94d82d","#82c91e","#74b816","#66a80f","#5c940d"],yellow:["#fff9db","#fff3bf","#ffec99","#ffe066","#ffd43b","#fcc419","#fab005","#f59f00","#f08c00","#e67700"],orange:["#fff4e6","#ffe8cc","#ffd8a8","#ffc078","#ffa94d","#ff922b","#fd7e14","#f76707","#e8590c","#d9480f"]};var xt=240,Fe=(e,t)=>t.reduce((n,r)=>(r in e&&(n[r]=e[r]),n),{}),bt=5,_t=5,At=4,C=4,F=1,E=[0,2,4,6,8],ht=[0,1,2,3,4],x=(e,t)=>t.map(n=>z[e][n]),u={transparent:"transparent",black:"#1e1e1e",white:"#ffffff",gray:x("gray",E),red:x("red",E),pink:x("pink",E),grape:x("grape",E),violet:x("violet",E),blue:x("blue",E),cyan:x("cyan",E),teal:x("teal",E),green:x("green",E),yellow:x("yellow",E),orange:x("orange",E),bronze:["#f8f1ee","#eaddd7","#d2bab0","#a18072","#846358"]},j=Fe(u,["cyan","blue","violet","grape","pink","green","teal","yellow","orange","red"]),yt=[u.black,u.red[C],u.green[C],u.blue[C],u.yellow[C]],gt=[u.transparent,u.red[F],u.green[F],u.blue[F],u.yellow[F]],Lt=[u.white,"#f8f9fa","#f5faff","#fffce8","#fdf8f6"],St={transparent:u.transparent,white:u.white,gray:u.gray,black:u.black,bronze:u.bronze,...j},Ot={transparent:u.transparent,white:u.white,gray:u.gray,black:u.black,bronze:u.bronze,...j},Rt=e=>[u.cyan[e],u.blue[e],u.violet[e],u.grape[e],u.pink[e],u.green[e],u.teal[e],u.yellow[e],u.orange[e],u.red[e]],vt=(e,t,n)=>`#${((1<<24)+(e<<16)+(t<<8)+n).toString(16).slice(1)}`;c();var w=/Mac|iPod|iPhone|iPad/.test(navigator.platform),It=/^Win/.test(navigator.platform),Mt=/\b(android)\b/i.test(navigator.userAgent),Pt=typeof window<"u"&&"netscape"in window&&navigator.userAgent.indexOf("rv:")>1&&navigator.userAgent.indexOf("Gecko")>1,we=navigator.userAgent.indexOf("Chrome")!==-1,Dt=!we&&navigator.userAgent.indexOf("Safari")!==-1,Ut=/iPad|iPhone/.test(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document,Nt=()=>navigator.brave?.isBrave?.name==="isBrave",kt=typeof window<"u"&&"ResizeObserver"in window,Ht="Excalidraw",Kt=36,Bt=10,Gt=8,Wt=5,Yt=1,Vt=30,Xt=Math.PI/12,$t="red",zt={TEXT:"text",CROSSHAIR:"crosshair",GRABBING:"grabbing",GRAB:"grab",POINTER:"pointer",MOVE:"move",AUTO:""},jt={MAIN:0,WHEEL:1,SECONDARY:2,TOUCH:-1,ERASER:5},Zt={enabled:"all",disabled:"none",inheritFromUI:"var(--ui-pointerEvents)"},Ie=(d=>(d.COPY="copy",d.PASTE="paste",d.CUT="cut",d.KEYDOWN="keydown",d.KEYUP="keyup",d.MOUSE_MOVE="mousemove",d.RESIZE="resize",d.UNLOAD="unload",d.FOCUS="focus",d.BLUR="blur",d.DRAG_OVER="dragover",d.DROP="drop",d.GESTURE_END="gestureend",d.BEFORE_UNLOAD="beforeunload",d.GESTURE_START="gesturestart",d.GESTURE_CHANGE="gesturechange",d.POINTER_MOVE="pointermove",d.POINTER_DOWN="pointerdown",d.POINTER_UP="pointerup",d.STATE_CHANGE="statechange",d.WHEEL="wheel",d.TOUCH_START="touchstart",d.TOUCH_END="touchend",d.HASHCHANGE="hashchange",d.VISIBILITY_CHANGE="visibilitychange",d.SCROLL="scroll",d.EXCALIDRAW_LINK="excalidraw-link",d.MENU_ITEM_SELECT="menu.itemSelect",d.MESSAGE="message",d.FULLSCREENCHANGE="fullscreenchange",d))(Ie||{}),qt={UNSTARTED:-1,ENDED:0,PLAYING:1,PAUSED:2,BUFFERING:3,CUED:5},I={TEST:"test",DEVELOPMENT:"development",PRODUCTION:"production"},Qt={SHAPE_ACTIONS_MENU:"App-menu__left",ZOOM_ACTIONS:"zoom-actions",SEARCH_MENU_INPUT_WRAPPER:"layer-ui__search-inputWrapper",CONVERT_ELEMENT_TYPE_POPUP:"ConvertElementTypePopup"},q="Xiaolai",L="Segoe UI Emoji",T={Virgil:1,Helvetica:2,Cascadia:3,Excalifont:5,Nunito:6,"Lilita One":7,"Comic Shanns":8,"Liberation Sans":9,Assistant:10},Q="sans-serif",J="monospace",Me={[Q]:998,[J]:999},B={[q]:100,...Me,[L]:1e3};function Pe(e){switch(e){case T.Cascadia:case T["Comic Shanns"]:return J;default:return Q}}var ee=e=>{let t=Pe(e);switch(e){case T.Excalifont:return[q,t,L];default:return[t,L]}},Jt={LIGHT:"light",DARK:"dark"},en={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},tn=1,nn=20,rn=T.Excalifont,on="left",sn="top",te="{version}",De=2,Ue=2*De,Ne=1e-5,an=2*Ue-Ne,ln="#ffffff",cn="#1e1e1e",un="#a2f1a6",pn=["selectAll"],dn=20,fn=5,ne={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"},Z={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",...ne},Tn=[Z.text,Z.html,...Object.values(ne)],mn={png:"png",svg:"svg",clipboard:"clipboard"},En={excalidraw:"excalidraw",excalidrawClipboard:"excalidraw/clipboard",excalidrawLibrary:"excalidrawlib",excalidrawClipboardWithAPI:"excalidraw-api/clipboard"},xn=()=>window.EXCALIDRAW_EXPORT_SOURCE||window.location.origin,bn=500,_n=300,An=500,hn=1e4,yn=3e4,gn=100,Ln=.1,Sn=.1,On=30,Rn=300,vn=6e4,Cn=3e3,Fn="invert(93%) hue-rotate(180deg)",wn={addLibrary:"addLibrary"},In={addLibrary:"addLibrary"},Mn={canvasActions:{changeViewBackgroundColor:!0,clearCanvas:!0,export:{saveFileToDisk:!0},loadScene:!0,saveToActiveFile:!0,toggleTheme:null,saveAsImage:!0},tools:{image:!0}},Pn=730,Dn=1e3,Un=500,Nn=1229,kn=2,Hn=[1,2,3],Kn=10,Bn=1440,Gn=4*1024*1024,Wn="http://www.w3.org/2000/svg",Yn=`<?xml version="1.0" standalone="no"?>
1
+ var he=Object.create;var Y=Object.defineProperty;var ye=Object.getOwnPropertyDescriptor;var ge=Object.getOwnPropertyNames;var Le=Object.getPrototypeOf,Se=Object.prototype.hasOwnProperty;var Oe=(e,t)=>()=>(e&&(t=e(e=0)),t);var V=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Re=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of ge(t))!Se.call(e,s)&&s!==n&&Y(e,s,{get:()=>t[s],enumerable:!(r=ye(t,s))||r.enumerable});return e};var X=(e,t,n)=>(n=e!=null?he(Le(e)):{},Re(t||!e||!e.__esModule?Y(n,"default",{value:e,enumerable:!0}):n,e));var f,c=Oe(()=>{f={PROD:!0}});var le=V((G,ae)=>{c();(function(e,t){typeof define=="function"&&define.amd?define([],t):typeof G=="object"?ae.exports=t():(e.PromisePool=t(),e.promisePool=e.PromisePool)})(G,function(){"use strict";var e=function(){this._listeners={}};e.prototype.addEventListener=function(o,a){this._listeners[o]=this._listeners[o]||[],this._listeners[o].indexOf(a)<0&&this._listeners[o].push(a)},e.prototype.removeEventListener=function(o,a){if(this._listeners[o]){var p=this._listeners[o].indexOf(a);p>=0&&this._listeners[o].splice(p,1)}},e.prototype.dispatchEvent=function(o){if(this._listeners[o.type]&&this._listeners[o.type].length)for(var a=this._listeners[o.type].slice(),p=0,m=a.length;p<m;++p)a[p].call(this,o)};var t=function(o){return typeof o.constructor=="function"&&o.constructor.name==="GeneratorFunction"},n=function(o){return{next:function(){var a=o();return a?{value:a}:{done:!0}}}},r=function(o){var a=!1;return{next:function(){return a?{done:!0}:(a=!0,{value:o})}}},s=function(o,a){var p=typeof o;if(p==="object"){if(typeof o.next=="function")return o;if(typeof o.then=="function")return r(o)}return p==="function"?t(o)?o():n(o):r(a.resolve(o))},l=function(o,a,p){this.target=o,this.type=a,this.data=p},i=function(o,a,p){if(e.call(this),typeof a!="number"||Math.floor(a)!==a||a<1)throw new Error("Invalid concurrency");this._concurrency=a,this._options=p||{},this._options.promise=this._options.promise||Promise,this._iterator=s(o,this._options.promise),this._done=!1,this._size=0,this._promise=null,this._callbacks=null};return i.prototype=new e,i.prototype.constructor=i,i.prototype.concurrency=function(o){return typeof o<"u"&&(this._concurrency=o,this.active()&&this._proceed()),this._concurrency},i.prototype.size=function(){return this._size},i.prototype.active=function(){return!!this._promise},i.prototype.promise=function(){return this._promise},i.prototype.start=function(){var o=this,a=this._options.promise;return this._promise=new a(function(p,m){o._callbacks={reject:m,resolve:p},o._proceed()}),this._promise},i.prototype._fireEvent=function(o,a){this.dispatchEvent(new l(this,o,a))},i.prototype._settle=function(o){o?this._callbacks.reject(o):this._callbacks.resolve(),this._promise=null,this._callbacks=null},i.prototype._onPooledPromiseFulfilled=function(o,a){this._size--,this.active()&&(this._fireEvent("fulfilled",{promise:o,result:a}),this._proceed())},i.prototype._onPooledPromiseRejected=function(o,a){this._size--,this.active()&&(this._fireEvent("rejected",{promise:o,error:a}),this._settle(a||new Error("Unknown error")))},i.prototype._trackPromise=function(o){var a=this;o.then(function(p){a._onPooledPromiseFulfilled(o,p)},function(p){a._onPooledPromiseRejected(o,p)}).catch(function(p){a._settle(new Error("Promise processing failed: "+p))})},i.prototype._proceed=function(){if(!this._done){for(var o={done:!1};this._size<this._concurrency&&!(o=this._iterator.next()).done;)this._size++,this._trackPromise(o.value);this._done=o===null||!!o.done}this._done&&this._size===0&&this._settle()},i.PromisePoolEvent=l,i.PromisePool=i,i})});var be=V(U=>{"use strict";c();Object.defineProperty(U,"__esModule",{value:!0});U.sanitizeUrl=void 0;var nt=/^([^\w]*)(javascript|data|vbscript)/im,rt=/&#(\w+)(^\w|;)?/g,ot=/&(newline|tab);/gi,st=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim,it=/^.+(:|&colon;)/gim,at=[".","/"];function lt(e){return at.indexOf(e[0])>-1}function ct(e){return e.replace(rt,function(t,n){return String.fromCharCode(n)})}function ut(e){var t=ct(e||"").replace(ot,"").replace(st,"").trim();if(!t)return"about:blank";if(lt(t))return t;var n=t.match(it);if(!n)return t;var r=n[0];return nt.test(r)?"about:blank":t}U.sanitizeUrl=ut});c();c();var $=class{constructor(t){this.scoreFunction=t}content=[];sinkDown(t){let n=this.content[t];for(;t>0;){let r=(t+1>>1)-1,s=this.content[r];if(this.scoreFunction(n)<this.scoreFunction(s))this.content[r]=n,this.content[t]=s,t=r;else break}}bubbleUp(t){let n=this.content.length,r=this.content[t],s=this.scoreFunction(r);for(;;){let l=t+1<<1,i=l-1,o=null,a=0;if(i<n){let p=this.content[i];a=this.scoreFunction(p),a<s&&(o=i)}if(l<n){let p=this.content[l];this.scoreFunction(p)<(o===null?s:a)&&(o=l)}if(o!==null)this.content[t]=this.content[o],this.content[o]=r,t=o;else break}}push(t){this.content.push(t),this.sinkDown(this.content.length-1)}pop(){if(this.content.length===0)return null;let t=this.content[0],n=this.content.pop();return this.content.length>0&&(this.content[0]=n,this.bubbleUp(0)),t}remove(t){if(this.content.length===0)return;let n=this.content.indexOf(t),r=this.content.pop();n<this.content.length&&(this.content[n]=r,this.scoreFunction(r)<this.scoreFunction(t)?this.sinkDown(n):this.bubbleUp(n))}size(){return this.content.length}rescoreElement(t){this.sinkDown(this.content.indexOf(t))}};c();var z={white:"#ffffff",black:"#000000",gray:["#f8f9fa","#f1f3f5","#e9ecef","#dee2e6","#ced4da","#adb5bd","#868e96","#495057","#343a40","#212529"],red:["#fff5f5","#ffe3e3","#ffc9c9","#ffa8a8","#ff8787","#ff6b6b","#fa5252","#f03e3e","#e03131","#c92a2a"],pink:["#fff0f6","#ffdeeb","#fcc2d7","#faa2c1","#f783ac","#f06595","#e64980","#d6336c","#c2255c","#a61e4d"],grape:["#f8f0fc","#f3d9fa","#eebefa","#e599f7","#da77f2","#cc5de8","#be4bdb","#ae3ec9","#9c36b5","#862e9c"],violet:["#f3f0ff","#e5dbff","#d0bfff","#b197fc","#9775fa","#845ef7","#7950f2","#7048e8","#6741d9","#5f3dc4"],indigo:["#edf2ff","#dbe4ff","#bac8ff","#91a7ff","#748ffc","#5c7cfa","#4c6ef5","#4263eb","#3b5bdb","#364fc7"],blue:["#e7f5ff","#d0ebff","#a5d8ff","#74c0fc","#4dabf7","#339af0","#228be6","#1c7ed6","#1971c2","#1864ab"],cyan:["#e3fafc","#c5f6fa","#99e9f2","#66d9e8","#3bc9db","#22b8cf","#15aabf","#1098ad","#0c8599","#0b7285"],teal:["#e6fcf5","#c3fae8","#96f2d7","#63e6be","#38d9a9","#20c997","#12b886","#0ca678","#099268","#087f5b"],green:["#ebfbee","#d3f9d8","#b2f2bb","#8ce99a","#69db7c","#51cf66","#40c057","#37b24d","#2f9e44","#2b8a3e"],lime:["#f4fce3","#e9fac8","#d8f5a2","#c0eb75","#a9e34b","#94d82d","#82c91e","#74b816","#66a80f","#5c940d"],yellow:["#fff9db","#fff3bf","#ffec99","#ffe066","#ffd43b","#fcc419","#fab005","#f59f00","#f08c00","#e67700"],orange:["#fff4e6","#ffe8cc","#ffd8a8","#ffc078","#ffa94d","#ff922b","#fd7e14","#f76707","#e8590c","#d9480f"]};var bt=240,Fe=(e,t)=>t.reduce((n,r)=>(r in e&&(n[r]=e[r]),n),{}),_t=5,At=5,ht=4,C=4,F=1,E=[0,2,4,6,8],yt=[0,1,2,3,4],x=(e,t)=>t.map(n=>z[e][n]),u={transparent:"transparent",black:"#1e1e1e",white:"#ffffff",gray:x("gray",E),red:x("red",E),pink:x("pink",E),grape:x("grape",E),violet:x("violet",E),blue:x("blue",E),cyan:x("cyan",E),teal:x("teal",E),green:x("green",E),yellow:x("yellow",E),orange:x("orange",E),bronze:["#f8f1ee","#eaddd7","#d2bab0","#a18072","#846358"]},j=Fe(u,["cyan","blue","violet","grape","pink","green","teal","yellow","orange","red"]),gt=[u.black,u.red[C],u.green[C],u.blue[C],u.yellow[C]],Lt=[u.transparent,u.red[F],u.green[F],u.blue[F],u.yellow[F]],St=[u.white,"#f8f9fa","#f5faff","#fffce8","#fdf8f6"],Ot={transparent:u.transparent,white:u.white,gray:u.gray,black:u.black,bronze:u.bronze,...j},Rt={transparent:u.transparent,white:u.white,gray:u.gray,black:u.black,bronze:u.bronze,...j},vt=e=>[u.cyan[e],u.blue[e],u.violet[e],u.grape[e],u.pink[e],u.green[e],u.teal[e],u.yellow[e],u.orange[e],u.red[e]],Ct=(e,t,n)=>`#${((1<<24)+(e<<16)+(t<<8)+n).toString(16).slice(1)}`;c();var w=/Mac|iPod|iPhone|iPad/.test(navigator.platform),Mt=/^Win/.test(navigator.platform),Pt=/\b(android)\b/i.test(navigator.userAgent),Dt=typeof window<"u"&&"netscape"in window&&navigator.userAgent.indexOf("rv:")>1&&navigator.userAgent.indexOf("Gecko")>1,we=navigator.userAgent.indexOf("Chrome")!==-1,Ut=!we&&navigator.userAgent.indexOf("Safari")!==-1,Ie=/iPad|iPhone/i.test(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document,Nt=()=>navigator.brave?.isBrave?.name==="isBrave",kt=Ie||/android|webos|ipod|blackberry|iemobile|opera mini/i.test(navigator.userAgent)||/android|ios|ipod|blackberry|windows phone/i.test(navigator.platform),Ht=typeof window<"u"&&"ResizeObserver"in window,Kt="Excalidraw",Bt=36,Gt=10,Wt=20,Yt=8,Vt=5,Xt=1,$t=30,zt=Math.PI/12,jt="red",Zt={TEXT:"text",CROSSHAIR:"crosshair",GRABBING:"grabbing",GRAB:"grab",POINTER:"pointer",MOVE:"move",AUTO:""},qt={MAIN:0,WHEEL:1,SECONDARY:2,TOUCH:-1,ERASER:5},Qt={enabled:"all",disabled:"none",inheritFromUI:"var(--ui-pointerEvents)"},Me=(d=>(d.COPY="copy",d.PASTE="paste",d.CUT="cut",d.KEYDOWN="keydown",d.KEYUP="keyup",d.MOUSE_MOVE="mousemove",d.RESIZE="resize",d.UNLOAD="unload",d.FOCUS="focus",d.BLUR="blur",d.DRAG_OVER="dragover",d.DROP="drop",d.GESTURE_END="gestureend",d.BEFORE_UNLOAD="beforeunload",d.GESTURE_START="gesturestart",d.GESTURE_CHANGE="gesturechange",d.POINTER_MOVE="pointermove",d.POINTER_DOWN="pointerdown",d.POINTER_UP="pointerup",d.STATE_CHANGE="statechange",d.WHEEL="wheel",d.TOUCH_START="touchstart",d.TOUCH_END="touchend",d.HASHCHANGE="hashchange",d.VISIBILITY_CHANGE="visibilitychange",d.SCROLL="scroll",d.EXCALIDRAW_LINK="excalidraw-link",d.MENU_ITEM_SELECT="menu.itemSelect",d.MESSAGE="message",d.FULLSCREENCHANGE="fullscreenchange",d))(Me||{}),Jt={UNSTARTED:-1,ENDED:0,PLAYING:1,PAUSED:2,BUFFERING:3,CUED:5},I={TEST:"test",DEVELOPMENT:"development",PRODUCTION:"production"},en={SHAPE_ACTIONS_MENU:"App-menu__left",ZOOM_ACTIONS:"zoom-actions",SEARCH_MENU_INPUT_WRAPPER:"layer-ui__search-inputWrapper",CONVERT_ELEMENT_TYPE_POPUP:"ConvertElementTypePopup"},q="Xiaolai",L="Segoe UI Emoji",T={Virgil:1,Helvetica:2,Cascadia:3,Excalifont:5,Nunito:6,"Lilita One":7,"Comic Shanns":8,"Liberation Sans":9,Assistant:10},Q="sans-serif",J="monospace",Pe={[Q]:998,[J]:999},B={[q]:100,...Pe,[L]:1e3};function De(e){switch(e){case T.Cascadia:case T["Comic Shanns"]:return J;default:return Q}}var ee=e=>{let t=De(e);switch(e){case T.Excalifont:return[q,t,L];default:return[t,L]}},tn={LIGHT:"light",DARK:"dark"},nn={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},rn=1,on=20,sn=T.Excalifont,an="left",ln="top",te="{version}",Ue=2,Ne=2*Ue,ke=1e-5,cn=2*Ne-ke,un="#ffffff",pn="#1e1e1e",dn="#a2f1a6",fn=["selectAll"],Tn=20,mn=5,ne={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"},Z={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",...ne},En=[Z.text,Z.html,...Object.values(ne)],xn={png:"png",svg:"svg",clipboard:"clipboard"},bn={excalidraw:"excalidraw",excalidrawClipboard:"excalidraw/clipboard",excalidrawLibrary:"excalidrawlib",excalidrawClipboardWithAPI:"excalidraw-api/clipboard"},_n=()=>window.EXCALIDRAW_EXPORT_SOURCE||window.location.origin,An=500,hn=300,yn=500,gn=1e4,Ln=3e4,Sn=100,On=.1,Rn=.1,vn=30,Cn=300,Fn=6e4,wn=3e3,In="invert(93%) hue-rotate(180deg)",Mn={addLibrary:"addLibrary"},Pn={addLibrary:"addLibrary"},Dn={canvasActions:{changeViewBackgroundColor:!0,clearCanvas:!0,export:{saveFileToDisk:!0},loadScene:!0,saveToActiveFile:!0,toggleTheme:null,saveAsImage:!0},tools:{image:!0}},Un=730,Nn=1e3,kn=500,Hn=1229,Kn=2,Bn=[1,2,3],Gn=10,Wn=1440,Yn=4*1024*1024,Vn="http://www.w3.org/2000/svg",Xn=`<?xml version="1.0" standalone="no"?>
2
2
  <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3
- `,Vn=128,Xn={excalidraw:2,excalidrawLibrary:2},$n=5,zn=.7,jn=11,Zn={TOP:"top",MIDDLE:"middle",BOTTOM:"bottom"},qn={LEFT:"left",CENTER:"center",RIGHT:"right"},Qn=20,Jn=.25,er=32,tr={LEGACY:1,PROPORTIONAL_RADIUS:2,ADAPTIVE_RADIUS:3},ke={architect:0,artist:1,cartoonist:2},nr={thin:1,bold:2,extraBold:4},rr={strokeColor:u.black,backgroundColor:u.transparent,fillStyle:"solid",strokeWidth:2,strokeStyle:"solid",roughness:ke.artist,opacity:100,locked:!1},He="library",or="search",sr={name:"default",defaultTab:He},ir=new Set(["iframe","embeddable","image"]),ar={selection:"selection",lasso:"lasso",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"},lr={OAI_API_KEY:"excalidraw-oai-api-key",MERMAID_TO_EXCALIDRAW:"mermaid-to-excalidraw",PUBLISH_LIBRARY:"publish-library-data"},cr="Untitled",ur={generalStats:1,elementProperties:2},pr=1,dr={sharp:"sharp",round:"round",elbow:"elbow"},fr=.3,Tr="element",mr=Symbol.for("__test__originalId__"),Ke=(r=>(r.ACTIVE="active",r.AWAY="away",r.IDLE="idle",r))(Ke||{}),Er=20;c();var M={[T.Excalifont]:{metrics:{unitsPerEm:1e3,ascender:886,descender:-374,lineHeight:1.25}},[T.Nunito]:{metrics:{unitsPerEm:1e3,ascender:1011,descender:-353,lineHeight:1.25}},[T["Lilita One"]]:{metrics:{unitsPerEm:1e3,ascender:923,descender:-220,lineHeight:1.15}},[T["Comic Shanns"]]:{metrics:{unitsPerEm:1e3,ascender:750,descender:-250,lineHeight:1.25}},[T.Virgil]:{metrics:{unitsPerEm:1e3,ascender:886,descender:-374,lineHeight:1.25},deprecated:!0},[T.Helvetica]:{metrics:{unitsPerEm:2048,ascender:1577,descender:-471,lineHeight:1.15},deprecated:!0,local:!0},[T.Cascadia]:{metrics:{unitsPerEm:2048,ascender:1900,descender:-480,lineHeight:1.2},deprecated:!0},[T["Liberation Sans"]]:{metrics:{unitsPerEm:2048,ascender:1854,descender:-434,lineHeight:1.15},private:!0},[T.Assistant]:{metrics:{unitsPerEm:2048,ascender:1021,descender:-287,lineHeight:1.25},private:!0},[B.Xiaolai]:{metrics:{unitsPerEm:1e3,ascender:880,descender:-144,lineHeight:1.25},fallback:!0},[B["Segoe UI Emoji"]]:{metrics:{unitsPerEm:1e3,ascender:886,descender:-374,lineHeight:1.25},local:!0,fallback:!0}},Ar={LATIN:"U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD",LATIN_EXT:"U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF",CYRILIC_EXT:"U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F",CYRILIC:"U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116",VIETNAMESE:"U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB"},hr="local:",yr=(e,t,n)=>{let{unitsPerEm:r,ascender:s,descender:l}=M[e]?.metrics||M[T.Excalifont].metrics,i=t/r,o=(n-i*s+i*l)/2;return i*s+o},gr=e=>{let{lineHeight:t}=M[e]?.metrics||M[T.Excalifont].metrics;return t};c();var re=class{jobs=[];running=!1;tick(){if(this.running)return;let t=this.jobs.shift();t?(this.running=!0,t.promise.resolve(se(t.jobFactory,...t.args).finally(()=>{this.running=!1,this.tick()}))):this.running=!1}push(t,...n){let r=oe();return this.jobs.push({jobFactory:t,promise:r,args:n}),this.tick(),r}};c();var ie={EQUAL:"Equal",MINUS:"Minus",NUM_ADD:"NumpadAdd",NUM_SUBTRACT:"NumpadSubtract",NUM_ZERO:"Numpad0",BRACKET_RIGHT:"BracketRight",BRACKET_LEFT:"BracketLeft",ONE:"Digit1",TWO:"Digit2",THREE:"Digit3",NINE:"Digit9",QUOTE:"Quote",ZERO:"Digit0",SLASH:"Slash",C:"KeyC",D:"KeyD",H:"KeyH",V:"KeyV",Z:"KeyZ",Y:"KeyY",R:"KeyR",S:"KeyS"},y={ARROW_DOWN:"ArrowDown",ARROW_LEFT:"ArrowLeft",ARROW_RIGHT:"ArrowRight",ARROW_UP:"ArrowUp",PAGE_UP:"PageUp",PAGE_DOWN:"PageDown",BACKSPACE:"Backspace",ALT:"Alt",CTRL_OR_CMD:w?"metaKey":"ctrlKey",DELETE:"Delete",ENTER:"Enter",ESCAPE:"Escape",QUESTION_MARK:"?",SPACE:" ",TAB:"Tab",CHEVRON_LEFT:"<",CHEVRON_RIGHT:">",PERIOD:".",COMMA:",",SUBTRACT:"-",SLASH:"/",A:"a",C:"c",D:"d",E:"e",F:"f",G:"g",H:"h",I:"i",L:"l",O:"o",P:"p",Q:"q",R:"r",S:"s",T:"t",V:"v",X:"x",Y:"y",Z:"z",K:"k",W:"w",0:"0",1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9"},Be=new Map([[y.Z,ie.Z],[y.Y,ie.Y]]),Ge=e=>/^[a-z]$/.test(e.toLowerCase()),Fr=(e,t)=>{if(t===e.key.toLowerCase())return!0;let n=Be.get(t);return!!(n&&!Ge(e.key)&&e.code===n)},wr=e=>e===y.ARROW_LEFT||e===y.ARROW_RIGHT||e===y.ARROW_DOWN||e===y.ARROW_UP,Ir=e=>e.altKey,Mr=e=>e.shiftKey,Pr=e=>e.shiftKey;c();import{pointFromPair as We}from"@excalidraw/math";var kr=e=>{let t=e.map(r=>r[0]),n=e.map(r=>r[1]);return{width:Math.max(...t)-Math.min(...t),height:Math.max(...n)-Math.min(...n)}},Hr=(e,t,n,r)=>{let s=n.map(b=>b[e]),l=Math.max(...s),i=Math.min(...s),o=l-i,a=o===0?1:t/o,p=1/0,m=n.map(b=>{let _=b[e]*a,A=[...b];return A[e]=_,_<p&&(p=_),A});if(!r||m.length===2)return m;let O=i-p;return m.map(b=>We(b.map((_,A)=>A===e?_+O:_)))},Kr=(e,t,n)=>n?[Math.round(e/n)*n,Math.round(t/n)*n]:[e,t];c();var ue=X(le(),1),ce=class{pool;entries={};constructor(t,n){this.pool=new ue.default(t,n)}all(){let t=n=>{if(n.data.result){let[r,s]=n.data.result;this.entries[r]=s}};return this.pool.addEventListener("fulfilled",t),this.pool.start().then(()=>(setTimeout(()=>{this.pool.removeEventListener("fulfilled",t)}),Object.values(this.entries)))}};c();c();c();var pe=(e=21)=>crypto.getRandomValues(new Uint8Array(e)).reduce((t,n)=>(n&=63,n<36?t+=n.toString(36):n<62?t+=(n-26).toString(36).toUpperCase():n>62?t+="-":t+="_",t),"");c();var S=class{constructor(t){this.seed=t}next(){return this.seed?(2**31-1&(this.seed=Math.imul(48271,this.seed)))/2**31:Math.random()}};c();import{average as P}from"@excalidraw/math";var W=null,ro=e=>{W=e},oo=()=>{if(W)return W;let e=new Date,t=e.getFullYear(),n=`${e.getMonth()+1}`.padStart(2,"0"),r=`${e.getDate()}`.padStart(2,"0"),s=`${e.getHours()}`.padStart(2,"0"),l=`${e.getMinutes()}`.padStart(2,"0");return`${t}-${n}-${r}-${s}${l}`},so=e=>e.charAt(0).toUpperCase()+e.slice(1),io=e=>e instanceof HTMLElement&&e.className.includes("ToolIcon"),Ye=e=>e instanceof HTMLElement&&e.dataset.type==="wysiwyg"||e instanceof HTMLBRElement||e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement||e instanceof HTMLSelectElement,ao=e=>Ye(e)||e instanceof Element&&!!e.closest("label, button"),lo=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"),Ve=({fontFamily:e})=>{for(let[t,n]of Object.entries(T))if(n===e)return`${t}${ee(n).map(r=>`, ${r}`).join("")}`;return L},co=({fontSize:e,fontFamily:t})=>`${e}px ${Ve({fontFamily:t})}`,uo=(e,t)=>{let n=0,r=null,s=(...l)=>{r=l,clearTimeout(n),n=window.setTimeout(()=>{r=null,e(...l)},t)};return s.flush=()=>{if(clearTimeout(n),r){let l=r;r=null,e(...l)}},s.cancel=()=>{r=null,clearTimeout(n)},s},po=(e,t)=>{let n=null,r=null,s=null,l=o=>{n=window.requestAnimationFrame(()=>{n=null,e(...o),r=null,s&&(r=s,s=null,l(r))})},i=(...o)=>{if(D()){e(...o);return}r=o,n===null?l(r):t?.trailing&&(s=o)};return i.flush=()=>{n!==null&&(cancelAnimationFrame(n),n=null),r&&(e(...s||r),r=s=null)},i.cancel=()=>{r=s=null,n!==null&&(cancelAnimationFrame(n),n=null)},i},Te=e=>1-Math.pow(1-e,4),de=(e,t,n)=>(t-e)*Te(n)+e,fo=({fromValues:e,toValues:t,onStep:n,duration:r=250,interpolateValue:s,onStart:l,onEnd:i,onCancel:o})=>{let a=!1,p=0,m;function O(N){if(a)return;m===void 0&&(m=N,l?.());let b=Math.min(N-m,r),_=Te(b/r),A={};if(Object.keys(e).forEach(g=>{let h=g,k=(t[h]-e[h])*_+e[h];A[h]=k}),n(A),b<r){let g=b/r,h={};Object.keys(e).forEach(k=>{let R=k,H=e[R],K=t[R],v;v=s?s(H,K,g,R):de(H,K,g),v==null&&(v=de(H,K,g)),h[R]=v}),n(h),p=window.requestAnimationFrame(O)}else n(t),i?.()}return p=window.requestAnimationFrame(O),()=>{o?.(),a=!0,window.cancelAnimationFrame(p)}},To=(e,t)=>{if(!e.length||t<1)return[];let n=0,r=0,s=Array(Math.ceil(e.length/t));for(;n<e.length;)s[r++]=e.slice(n,n+=t);return s},mo=e=>{let t=window.getSelection();if(t){let n=document.createRange();n.selectNodeContents(e),t.removeAllRanges(),t.addRange(n)}},Eo=()=>{let e=window.getSelection();e&&e.removeAllRanges()},xo=(e,t)=>Math.abs(e-t),bo=(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,fromSelection:t.fromSelection??!1},_o=()=>document.fullscreenElement?.nodeName==="HTML",Ao=()=>document.documentElement.requestFullscreen(),ho=()=>document.exitFullscreen(),yo=e=>(e=e.replace(/\bAlt\b/i,"Alt").replace(/\bShift\b/i,"Shift").replace(/\b(Enter|Return)\b/i,"Enter"),w?e.replace(/\bCtrlOrCmd\b/gi,"Cmd").replace(/\bAlt\b/i,"Option"):e.replace(/\bCtrlOrCmd\b/gi,"Ctrl")),go=({clientX:e,clientY:t},{zoom:n,offsetLeft:r,offsetTop:s,scrollX:l,scrollY:i})=>{let o=(e-r)/n.value-l,a=(t-s)/n.value-i;return{x:o,y:a}},Lo=({sceneX:e,sceneY:t},{zoom:n,offsetLeft:r,offsetTop:s,scrollX:l,scrollY:i})=>{let o=(e+l)*n.value+r,a=(t+i)*n.value+s;return{x:o,y:a}},So=e=>getComputedStyle(document.documentElement).getPropertyValue(`--${e}`),Xe="A-Za-z\xC0-\xD6\xD8-\xF6\xF8-\u02B8\u0300-\u0590\u0800-\u1FFF\u2C00-\uFB1C\uFDFE-\uFE6F\uFEFD-\uFFFF",$e="\u0591-\u07FF\uFB1D-\uFDFD\uFE70-\uFEFC",ze=new RegExp(`^[^${Xe}]*[${$e}]`),Oo=e=>ze.test(e),Ro=e=>{let[t,n]=e;return{x:t,y:n}},vo=e=>{if(e?.name==="AbortError"){console.warn(e);return}throw e},Co=(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},Fo=(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},wo=(e,t)=>{for(let n=0;n<e.length;n++){let r=t(e[n],n);if(r!=null)return r}},je=e=>{let t=e.length===5&&e.substr(4,1)==="0",n=e.length===9&&e.substr(7,2)==="00";return t||n||e===u.transparent},Io=e=>e.fillStyle!=="solid"||je(e.backgroundColor),oe=()=>{let e,t,n=new Promise((r,s)=>{e=r,t=s});return n.resolve=e,n.reject=t,n},Mo=(e,t)=>{let n=[{value:1,symbol:"b"},{value:1e3,symbol:"k"},{value:1e6,symbol:"M"},{value:1e9,symbol:"G"}],r=/\.0+$|(\.[0-9]*[1-9])0+$/,s;for(s=n.length-1;s>0&&!(e>=n[s].value);s--);return(e/n[s].value).toFixed(t).replace(r,"$1")+n[s].symbol},Po=()=>document.querySelector('meta[name="version"]')?.content||te,Do=()=>{let t=document.createElement("canvas").getContext("2d");if(!t)return!1;let n=12;return t.fillStyle="#f00",t.textBaseline="top",t.font="32px Arial",t.fillText("\u{1F600}",0,0),t.getImageData(n,n,1,1).data[0]!==0},Uo=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},No=e=>{let t=e.parentElement;for(;t;){if(t.tabIndex>-1){t.focus();return}t=t.parentElement}},ko=e=>{e.preventDefault(),e.returnValue=""},Ho=e=>Array.from(e).map(t=>`0${t.toString(16)}`.slice(-2)).join(""),Ko=()=>D()?1:Date.now(),Bo=e=>e instanceof Map?e:e.reduce((t,n)=>(t.set(typeof n=="string"?n:n.id,n),t),new Map),Go=e=>e.reduce((t,n,r)=>(t.set(n.id,[n,r]),t),new Map),Wo=(e,t)=>e.reduce((n,r,s)=>(n[t?t(r):s]=r,n),{}),Yo=e=>e.reduce((t,n,r)=>{let s={...n,prev:null,next:null};if(r!==0){let l=t[r-1];if(s.prev=l,l.next=s,r===e.length-1){let i=t[0];s.next=i,i.prev=s}}return t.push(s),t},[]),Ze=e=>Array.isArray(e)?e:e.values(),Vo=e=>Array.isArray(e)?e:Array.from(Ze(e)),D=()=>f.MODE===I.TEST,Xo=()=>f.MODE===I.DEVELOPMENT,$o=()=>f.MODE===I.PRODUCTION,zo=()=>typeof process<"u"&&!0,jo=(e,t)=>new CustomEvent(e,{detail:{nativeEvent:t},cancelable:!0}),Zo=(e,t)=>{let n=!1;for(let r in t){let s=t[r];if(typeof s<"u"){if(e[r]===s&&(typeof s!="object"||s===null))continue;n=!0}}return n?{...e,...t}:e},qo=e=>{let t=typeof e;return e==null||t!=="object"&&t!=="function"},qe=()=>{try{return window.self===window.top?"top":"iframe"}catch{return"iframe"}},Qo=()=>qe()==="iframe",Jo=e=>!!e&&typeof e=="object"&&"then"in e&&"catch"in e&&"finally"in e,es=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):[]},fe=(e,t)=>Array.isArray(e)&&Array.isArray(t)&&e.length===0&&t.length===0?!0:e===t,Qe=(e,t,n,r=!1)=>{let s=Object.keys(e),l=Object.keys(t);if(s.length!==l.length)return r&&console.warn("%cisShallowEqual: objects don't have same properties ->","color: #8B4000",e,t),!1;if(n&&Array.isArray(n)){for(let i of n)if(!(e[i]===t[i]||fe(e[i],t[i])))return r&&console.warn(`%cisShallowEqual: ${i} not equal ->`,"color: #8B4000",e[i],t[i]),!1;return!0}return s.every(i=>{let o=n?.[i],a=o?o(e[i],t[i]):e[i]===t[i]||fe(e[i],t[i]);return!a&&r&&console.warn(`%cisShallowEqual: ${i} not equal ->`,"color: #8B4000",e[i],t[i]),a})},ts=(e,t,{checkForDefaultPrevented:n=!0}={})=>function(s){if(e?.(s),!n||!s?.defaultPrevented)return t?.(s)},ns=(e,t,n)=>{if(!t)return e;if(n)return console.error(t),e;throw new Error(t)};function rs(e,t){if(!e)throw new Error(t)}var os=e=>{let t,n,r=function(s){let l=Object.entries(s);if(t){let o=!0;for(let[a,p]of l)if(t.get(a)!==p){o=!1;break}if(o)return n}let i=e(s);return t=new Map(l),n=i,i};return r.clear=()=>{t=void 0,n=void 0},r},ss=(e,t)=>e instanceof Set||e instanceof Map?e.has(t):"includes"in e?e.includes(t):e.hasOwnProperty(t),is=e=>JSON.parse(JSON.stringify(e)),as=(e,t)=>Qe(e,t)?e:t;function ls(e,t,n,r){return e?(e?.addEventListener?.(t,n,r),()=>{e?.removeEventListener?.(t,n,r)}):()=>{}}function cs(e,t=!0){let n=e.length;if(n<4)return"";let r=e[0],s=e[1],l=e[2],i=`M${r[0].toFixed(2)},${r[1].toFixed(2)} Q${s[0].toFixed(2)},${s[1].toFixed(2)} ${P(s[0],l[0]).toFixed(2)},${P(s[1],l[1]).toFixed(2)} T`;for(let o=2,a=n-1;o<a;o++)r=e[o],s=e[o+1],i+=`${P(r[0],s[0]).toFixed(2)},${P(r[1],s[1]).toFixed(2)} `;return t&&(i+="Z"),i}var us=e=>e.replace(/\r?\n|\r/g,`
4
- `),ps=e=>e,se=async(e,...t)=>new Promise(n=>{n(e(...t))}),ds=(...e)=>Math.max(...e.map(t=>t?1:0))>0,fs=e=>{try{return JSON.parse(e)}catch{return null}},me=e=>e.replace(/"/g,"&quot;"),Ts=e=>Array.isArray(e)?e:[e],Je=e=>Array.isArray(e),et=e=>Je(e)?e.length:e instanceof Map||e instanceof Set?e.size:Object.keys(e).length,ms=(e,t)=>{if(et(e)===0)return null;let n=t||(s=>s),r=null;for(let s of e){let l=n(s);if((r===null||r===l)&&l!=null)r=l;else return null}return r};var Ee=new S(Date.now()),xe=0,hs=()=>Math.floor(Ee.next()*2**31),ys=e=>{Ee=new S(e),xe=0},gs=()=>D()?`id${xe++}`:pe();c();var _e=X(be(),1);var ut=e=>(e=e.trim(),e&&(0,_e.sanitizeUrl)(me(e))),Cs=e=>!!(e?.includes(location.origin)||e?.startsWith("/")),Fs=e=>{if(e=ut(e),e.startsWith("/"))return`${location.origin}${e}`;try{new URL(e)}catch{return"about:blank"}return e};c();var Ae=class{subscribers=[];on(...t){let n=t.flat().filter(r=>typeof r=="function");return this.subscribers.push(...n),()=>this.off(n)}once(...t){let n=t.flat().filter(s=>typeof s=="function");n.push(()=>r());let r=this.on(...n);return r}off(...t){let n=t.flat();this.subscribers=this.subscribers.filter(r=>!n.includes(r))}trigger(...t){for(let n of this.subscribers)n(...t);return this}clear(){this.subscribers=[]}};export{Cn as ACTIVE_THRESHOLD,Tn as ALLOWED_PASTE_MIME_TYPES,Ht as APP_NAME,jn as ARROW_LABEL_FONT_SIZE_TO_MIN_WIDTH_RATIO,zn as ARROW_LABEL_WIDTH_FRACTION,dr as ARROW_TYPE,$n as BOUND_TEXT_PADDING,$ as BinaryHeap,pn as CANVAS_ONLY_ACTIONS,ht as CANVAS_PALETTE_SHADE_INDEXES,or as CANVAS_SEARCH_TAB,q as CJK_HAND_DRAWN_FALLBACK_FONT,Qt as CLASSES,ie as CODES,_t as COLORS_PER_ROW,cn as COLOR_CHARCOAL_BLACK,xt as COLOR_OUTLINE_CONTRAST_THRESHOLD,u as COLOR_PALETTE,un as COLOR_VOICE_CALL,ln as COLOR_WHITE,zt as CURSOR_TYPE,er as DEFAULT_ADAPTIVE_RADIUS,Lt as DEFAULT_CANVAS_BACKGROUND_PICKS,At as DEFAULT_CHART_COLOR_INDEX,an as DEFAULT_COLLISION_THRESHOLD,F as DEFAULT_ELEMENT_BACKGROUND_COLOR_INDEX,Ot as DEFAULT_ELEMENT_BACKGROUND_COLOR_PALETTE,gt as DEFAULT_ELEMENT_BACKGROUND_PICKS,rr as DEFAULT_ELEMENT_PROPS,C as DEFAULT_ELEMENT_STROKE_COLOR_INDEX,St as DEFAULT_ELEMENT_STROKE_COLOR_PALETTE,yt as DEFAULT_ELEMENT_STROKE_PICKS,Kn as DEFAULT_EXPORT_PADDING,cr as DEFAULT_FILENAME,rn as DEFAULT_FONT_FAMILY,nn as DEFAULT_FONT_SIZE,dn as DEFAULT_GRID_SIZE,fn as DEFAULT_GRID_STEP,$t as DEFAULT_LASER_COLOR,Bn as DEFAULT_MAX_IMAGE_WIDTH_OR_HEIGHT,Jn as DEFAULT_PROPORTIONAL_RADIUS,fr as DEFAULT_REDUCED_GLOBAL_ALPHA,sr as DEFAULT_SIDEBAR,on as DEFAULT_TEXT_ALIGN,De as DEFAULT_TRANSFORM_HANDLE_SPACING,Mn as DEFAULT_UI_OPTIONS,te as DEFAULT_VERSION,sn as DEFAULT_VERTICAL_ALIGN,Bt as DRAGGING_THRESHOLD,lr as EDITOR_LS_KEYS,E as ELEMENTS_PALETTE_SHADE_INDEXES,Tr as ELEMENT_LINK_KEY,Qn as ELEMENT_READY_TO_ERASE_OPACITY,Wt as ELEMENT_SHIFT_TRANSLATE_AMOUNT,Yt as ELEMENT_TRANSLATE_AMOUNT,Vn as ENCRYPTION_KEY_BITS,I as ENV,Ne as EPSILON,Ie as EVENT,En as EXPORT_DATA_TYPES,mn as EXPORT_IMAGE_TYPES,Hn as EXPORT_SCALES,Ae as Emitter,T as FONT_FAMILY,B as FONT_FAMILY_FALLBACKS,Me as FONT_FAMILY_GENERIC_FALLBACKS,M as FONT_METADATA,en as FRAME_STYLE,Ar as GOOGLE_FONTS_RANGES,Rn as HYPERLINK_TOOLTIP_DELAY,vn as IDLE_THRESHOLD,ne as IMAGE_MIME_TYPES,bn as IMAGE_RENDER_TIMEOUT,y as KEYS,Be as KeyCodeMap,ir as LIBRARY_DISABLED_TYPES,He as LIBRARY_SIDEBAR_TAB,Gt as LINE_CONFIRM_THRESHOLD,Er as LINE_POLYGON_POINT_MERGE_DISTANCE,hr as LOCAL_FONT_PROTOCOL,Gn as MAX_ALLOWED_FILE_BYTES,bt as MAX_CUSTOM_COLORS_USED_IN_CANVAS,kn as MAX_DECIMALS_FOR_SVG_EXPORT,On as MAX_ZOOM,Z as MIME_TYPES,tn as MIN_FONT_SIZE,pr as MIN_WIDTH_OR_HEIGHT,Sn as MIN_ZOOM,J as MONOSPACE_GENERIC_FONT,Un as MQ_MAX_HEIGHT_LANDSCAPE,Dn as MQ_MAX_WIDTH_LANDSCAPE,Pn as MQ_MAX_WIDTH_PORTRAIT,Nn as MQ_RIGHT_SIDEBAR_MIN_WIDTH,mr as ORIG_ID,jt as POINTER_BUTTON,Zt as POINTER_EVENTS,ce as PromisePool,re as Queue,ke as ROUGHNESS,tr as ROUNDNESS,Q as SANS_SERIF_GENERIC_FONT,gn as SCROLL_TIMEOUT,Xt as SHIFT_LOCKING_ANGLE,Ue as SIDE_RESIZING_THRESHOLD,ur as STATS_PANELS,nr as STROKE_WIDTH,Yn as SVG_DOCUMENT_PREAMBLE,Wn as SVG_NS,_n as TAP_TWICE_TIMEOUT,qn as TEXT_ALIGN,Kt as TEXT_AUTOWRAP_THRESHOLD,Vt as TEXT_TO_CENTER_SNAP_THRESHOLD,Jt as THEME,Fn as THEME_FILTER,hn as TITLE_TIMEOUT,ar as TOOL_TYPE,An as TOUCH_CTX_MENU_TIMEOUT,In as URL_HASH_KEYS,wn as URL_QUERY_KEYS,Ke as UserIdleState,Xn as VERSIONS,yn as VERSION_TIMEOUT,Zn as VERTICAL_ALIGN,L as WINDOWS_EMOJI_FALLBACK_FONT,qt as YOUTUBE_STATES,Ln as ZOOM_STEP,ls as addEventListener,Ao as allowFullScreen,Yo as arrayToList,Bo as arrayToMap,Go as arrayToMapWithIndex,Wo as arrayToObject,ns as assertNever,Ho as bytesToHexString,so as capitalizeString,Ts as castArray,To as chunk,is as cloneJSON,ts as composeEventHandlers,uo as debounce,xo as distance,Te as easeOut,fo as easeToValuesRAF,me as escapeDoubleQuotes,ho as exitFullScreen,Co as findIndex,Fo as findLastIndex,No as focusNearestParent,Rt as getAllColorsSpecificShade,oo as getDateTime,xn as getExportSource,ee as getFontFamilyFallbacks,Ve as getFontFamilyString,co as getFontString,qe as getFrame,Pe as getGenericFontFamilyFallback,So as getGlobalCSSVariable,Kr as getGridPoint,gr as getLineHeight,Uo as getNearestScrollableContainer,yo as getShortcutKey,kr as getSizeFromPoints,x as getSpecificColorShades,cs as getSvgPathFromStroke,Ko as getUpdatedTimestamp,Po as getVersion,yr as getVerticalOffset,rs as invariant,Mt as isAndroid,ds as isAnyTrue,wr as isArrowKey,Io as isBindingFallthroughEnabled,Nt as isBrave,we as isChrome,w as isDarwin,Xo as isDevEnv,Pt as isFirefox,_o as isFullScreen,Ut as isIOS,Ye as isInputLike,ao as isInteractive,Ge as isLatinChar,Cs as isLocalLink,ss as isMemberOf,qo as isPrimitive,$o as isProdEnv,Jo as isPromiseLike,Oo as isRTL,Je as isReadonlyArray,Qo as isRunningInIframe,Dt as isSafari,zo as isServerEnv,Qe as isShallowEqual,D as isTestEnv,io as isToolIcon,je as isTransparent,It as isWindows,lo as isWritableElement,wo as mapFind,Fr as matchKey,os as memoize,vo as muteFSAbortError,Mo as nFormatter,us as normalizeEOL,ut as normalizeLink,ko as preventUnload,se as promiseTry,es as queryFocusableElements,gs as randomId,hs as randomInteger,ms as reduceToCommonValue,Eo as removeSelection,Hr as rescalePoints,ys as reseed,oe as resolvablePromise,vt as rgbToHex,fs as safelyParseJSON,Lo as sceneCoordsToViewportCoords,mo as selectNode,ro as setDateTimeForTests,Mr as shouldMaintainAspectRatio,Ir as shouldResizeFromCenter,Pr as shouldRotateWithDiscreteAngle,et as sizeOf,Do as supportsEmoji,kt as supportsResizeObserver,po as throttleRAF,Vo as toArray,ps as toBrandedType,Ze as toIterable,Fs as toValidURL,Ro as tupleToCoors,bo as updateActiveTool,Zo as updateObject,as as updateStable,go as viewportCoordsToSceneCoords,jo as wrapEvent};
3
+ `,$n=128,zn={excalidraw:2,excalidrawLibrary:2},jn=5,Zn=.7,qn=11,Qn={TOP:"top",MIDDLE:"middle",BOTTOM:"bottom"},Jn={LEFT:"left",CENTER:"center",RIGHT:"right"},er=20,tr=.25,nr=32,rr={LEGACY:1,PROPORTIONAL_RADIUS:2,ADAPTIVE_RADIUS:3},He={architect:0,artist:1,cartoonist:2},or={thin:1,bold:2,extraBold:4},sr={strokeColor:u.black,backgroundColor:u.transparent,fillStyle:"solid",strokeWidth:2,strokeStyle:"solid",roughness:He.artist,opacity:100,locked:!1},Ke="library",ir="search",ar={name:"default",defaultTab:Ke},lr=new Set(["iframe","embeddable","image"]),cr={selection:"selection",lasso:"lasso",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"},ur={OAI_API_KEY:"excalidraw-oai-api-key",MERMAID_TO_EXCALIDRAW:"mermaid-to-excalidraw",PUBLISH_LIBRARY:"publish-library-data"},pr="Untitled",dr={generalStats:1,elementProperties:2},fr=1,Tr={sharp:"sharp",round:"round",elbow:"elbow"},mr=.3,Er="element",xr=Symbol.for("__test__originalId__"),Be=(r=>(r.ACTIVE="active",r.AWAY="away",r.IDLE="idle",r))(Be||{}),br=20,_r=35;c();var M={[T.Excalifont]:{metrics:{unitsPerEm:1e3,ascender:886,descender:-374,lineHeight:1.25}},[T.Nunito]:{metrics:{unitsPerEm:1e3,ascender:1011,descender:-353,lineHeight:1.25}},[T["Lilita One"]]:{metrics:{unitsPerEm:1e3,ascender:923,descender:-220,lineHeight:1.15}},[T["Comic Shanns"]]:{metrics:{unitsPerEm:1e3,ascender:750,descender:-250,lineHeight:1.25}},[T.Virgil]:{metrics:{unitsPerEm:1e3,ascender:886,descender:-374,lineHeight:1.25},deprecated:!0},[T.Helvetica]:{metrics:{unitsPerEm:2048,ascender:1577,descender:-471,lineHeight:1.15},deprecated:!0,local:!0},[T.Cascadia]:{metrics:{unitsPerEm:2048,ascender:1900,descender:-480,lineHeight:1.2},deprecated:!0},[T["Liberation Sans"]]:{metrics:{unitsPerEm:2048,ascender:1854,descender:-434,lineHeight:1.15},private:!0},[T.Assistant]:{metrics:{unitsPerEm:2048,ascender:1021,descender:-287,lineHeight:1.25},private:!0},[B.Xiaolai]:{metrics:{unitsPerEm:1e3,ascender:880,descender:-144,lineHeight:1.25},fallback:!0},[B["Segoe UI Emoji"]]:{metrics:{unitsPerEm:1e3,ascender:886,descender:-374,lineHeight:1.25},local:!0,fallback:!0}},gr={LATIN:"U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD",LATIN_EXT:"U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF",CYRILIC_EXT:"U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F",CYRILIC:"U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116",VIETNAMESE:"U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB"},Lr="local:",Sr=(e,t,n)=>{let{unitsPerEm:r,ascender:s,descender:l}=M[e]?.metrics||M[T.Excalifont].metrics,i=t/r,o=(n-i*s+i*l)/2;return i*s+o},Or=e=>{let{lineHeight:t}=M[e]?.metrics||M[T.Excalifont].metrics;return t};c();var re=class{jobs=[];running=!1;tick(){if(this.running)return;let t=this.jobs.shift();t?(this.running=!0,t.promise.resolve(se(t.jobFactory,...t.args).finally(()=>{this.running=!1,this.tick()}))):this.running=!1}push(t,...n){let r=oe();return this.jobs.push({jobFactory:t,promise:r,args:n}),this.tick(),r}};c();var ie={EQUAL:"Equal",MINUS:"Minus",NUM_ADD:"NumpadAdd",NUM_SUBTRACT:"NumpadSubtract",NUM_ZERO:"Numpad0",BRACKET_RIGHT:"BracketRight",BRACKET_LEFT:"BracketLeft",ONE:"Digit1",TWO:"Digit2",THREE:"Digit3",NINE:"Digit9",QUOTE:"Quote",ZERO:"Digit0",SLASH:"Slash",C:"KeyC",D:"KeyD",H:"KeyH",V:"KeyV",Z:"KeyZ",Y:"KeyY",R:"KeyR",S:"KeyS"},y={ARROW_DOWN:"ArrowDown",ARROW_LEFT:"ArrowLeft",ARROW_RIGHT:"ArrowRight",ARROW_UP:"ArrowUp",PAGE_UP:"PageUp",PAGE_DOWN:"PageDown",BACKSPACE:"Backspace",ALT:"Alt",CTRL_OR_CMD:w?"metaKey":"ctrlKey",DELETE:"Delete",ENTER:"Enter",ESCAPE:"Escape",QUESTION_MARK:"?",SPACE:" ",TAB:"Tab",CHEVRON_LEFT:"<",CHEVRON_RIGHT:">",PERIOD:".",COMMA:",",SUBTRACT:"-",SLASH:"/",A:"a",C:"c",D:"d",E:"e",F:"f",G:"g",H:"h",I:"i",L:"l",O:"o",P:"p",Q:"q",R:"r",S:"s",T:"t",V:"v",X:"x",Y:"y",Z:"z",K:"k",W:"w",0:"0",1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9"},Ge=new Map([[y.Z,ie.Z],[y.Y,ie.Y]]),We=e=>/^[a-z]$/.test(e.toLowerCase()),Mr=(e,t)=>{if(t===e.key.toLowerCase())return!0;let n=Ge.get(t);return!!(n&&!We(e.key)&&e.code===n)},Pr=e=>e===y.ARROW_LEFT||e===y.ARROW_RIGHT||e===y.ARROW_DOWN||e===y.ARROW_UP,Dr=e=>e.altKey,Ur=e=>e.shiftKey,Nr=e=>e.shiftKey;c();import{pointFromPair as Ye}from"@excalidraw/math";var Br=e=>{let t=e.map(r=>r[0]),n=e.map(r=>r[1]);return{width:Math.max(...t)-Math.min(...t),height:Math.max(...n)-Math.min(...n)}},Gr=(e,t,n,r)=>{let s=n.map(b=>b[e]),l=Math.max(...s),i=Math.min(...s),o=l-i,a=o===0?1:t/o,p=1/0,m=n.map(b=>{let _=b[e]*a,A=[...b];return A[e]=_,_<p&&(p=_),A});if(!r||m.length===2)return m;let O=i-p;return m.map(b=>Ye(b.map((_,A)=>A===e?_+O:_)))},Wr=(e,t,n)=>n?[Math.round(e/n)*n,Math.round(t/n)*n]:[e,t];c();var ue=X(le(),1),ce=class{pool;entries={};constructor(t,n){this.pool=new ue.default(t,n)}all(){let t=n=>{if(n.data.result){let[r,s]=n.data.result;this.entries[r]=s}};return this.pool.addEventListener("fulfilled",t),this.pool.start().then(()=>(setTimeout(()=>{this.pool.removeEventListener("fulfilled",t)}),Object.values(this.entries)))}};c();c();c();var pe=(e=21)=>crypto.getRandomValues(new Uint8Array(e)).reduce((t,n)=>(n&=63,n<36?t+=n.toString(36):n<62?t+=(n-26).toString(36).toUpperCase():n>62?t+="-":t+="_",t),"");c();var S=class{constructor(t){this.seed=t}next(){return this.seed?(2**31-1&(this.seed=Math.imul(48271,this.seed)))/2**31:Math.random()}};c();import{average as P}from"@excalidraw/math";var W=null,io=e=>{W=e},ao=()=>{if(W)return W;let e=new Date,t=e.getFullYear(),n=`${e.getMonth()+1}`.padStart(2,"0"),r=`${e.getDate()}`.padStart(2,"0"),s=`${e.getHours()}`.padStart(2,"0"),l=`${e.getMinutes()}`.padStart(2,"0");return`${t}-${n}-${r}-${s}${l}`},lo=e=>e.charAt(0).toUpperCase()+e.slice(1),co=e=>e instanceof HTMLElement&&e.className.includes("ToolIcon"),Ve=e=>e instanceof HTMLElement&&e.dataset.type==="wysiwyg"||e instanceof HTMLBRElement||e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement||e instanceof HTMLSelectElement,uo=e=>Ve(e)||e instanceof Element&&!!e.closest("label, button"),po=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"),Xe=({fontFamily:e})=>{for(let[t,n]of Object.entries(T))if(n===e)return`${t}${ee(n).map(r=>`, ${r}`).join("")}`;return L},fo=({fontSize:e,fontFamily:t})=>`${e}px ${Xe({fontFamily:t})}`,To=(e,t)=>{let n=0,r=null,s=(...l)=>{r=l,clearTimeout(n),n=window.setTimeout(()=>{r=null,e(...l)},t)};return s.flush=()=>{if(clearTimeout(n),r){let l=r;r=null,e(...l)}},s.cancel=()=>{r=null,clearTimeout(n)},s},mo=(e,t)=>{let n=null,r=null,s=null,l=o=>{n=window.requestAnimationFrame(()=>{n=null,e(...o),r=null,s&&(r=s,s=null,l(r))})},i=(...o)=>{if(D()){e(...o);return}r=o,n===null?l(r):t?.trailing&&(s=o)};return i.flush=()=>{n!==null&&(cancelAnimationFrame(n),n=null),r&&(e(...s||r),r=s=null)},i.cancel=()=>{r=s=null,n!==null&&(cancelAnimationFrame(n),n=null)},i},Te=e=>1-Math.pow(1-e,4),de=(e,t,n)=>(t-e)*Te(n)+e,Eo=({fromValues:e,toValues:t,onStep:n,duration:r=250,interpolateValue:s,onStart:l,onEnd:i,onCancel:o})=>{let a=!1,p=0,m;function O(N){if(a)return;m===void 0&&(m=N,l?.());let b=Math.min(N-m,r),_=Te(b/r),A={};if(Object.keys(e).forEach(g=>{let h=g,k=(t[h]-e[h])*_+e[h];A[h]=k}),n(A),b<r){let g=b/r,h={};Object.keys(e).forEach(k=>{let R=k,H=e[R],K=t[R],v;v=s?s(H,K,g,R):de(H,K,g),v==null&&(v=de(H,K,g)),h[R]=v}),n(h),p=window.requestAnimationFrame(O)}else n(t),i?.()}return p=window.requestAnimationFrame(O),()=>{o?.(),a=!0,window.cancelAnimationFrame(p)}},xo=(e,t)=>{if(!e.length||t<1)return[];let n=0,r=0,s=Array(Math.ceil(e.length/t));for(;n<e.length;)s[r++]=e.slice(n,n+=t);return s},bo=e=>{let t=window.getSelection();if(t){let n=document.createRange();n.selectNodeContents(e),t.removeAllRanges(),t.addRange(n)}},_o=()=>{let e=window.getSelection();e&&e.removeAllRanges()},Ao=(e,t)=>Math.abs(e-t),ho=(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,fromSelection:t.fromSelection??!1},yo=()=>document.fullscreenElement?.nodeName==="HTML",go=()=>document.documentElement.requestFullscreen(),Lo=()=>document.exitFullscreen(),So=e=>(e=e.replace(/\bAlt\b/i,"Alt").replace(/\bShift\b/i,"Shift").replace(/\b(Enter|Return)\b/i,"Enter"),w?e.replace(/\bCtrlOrCmd\b/gi,"Cmd").replace(/\bAlt\b/i,"Option"):e.replace(/\bCtrlOrCmd\b/gi,"Ctrl")),Oo=({clientX:e,clientY:t},{zoom:n,offsetLeft:r,offsetTop:s,scrollX:l,scrollY:i})=>{let o=(e-r)/n.value-l,a=(t-s)/n.value-i;return{x:o,y:a}},Ro=({sceneX:e,sceneY:t},{zoom:n,offsetLeft:r,offsetTop:s,scrollX:l,scrollY:i})=>{let o=(e+l)*n.value+r,a=(t+i)*n.value+s;return{x:o,y:a}},vo=e=>getComputedStyle(document.documentElement).getPropertyValue(`--${e}`),$e="A-Za-z\xC0-\xD6\xD8-\xF6\xF8-\u02B8\u0300-\u0590\u0800-\u1FFF\u2C00-\uFB1C\uFDFE-\uFE6F\uFEFD-\uFFFF",ze="\u0591-\u07FF\uFB1D-\uFDFD\uFE70-\uFEFC",je=new RegExp(`^[^${$e}]*[${ze}]`),Co=e=>je.test(e),Fo=e=>{let[t,n]=e;return{x:t,y:n}},wo=e=>{if(e?.name==="AbortError"){console.warn(e);return}throw e},Io=(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},Mo=(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},Po=(e,t)=>{for(let n=0;n<e.length;n++){let r=t(e[n],n);if(r!=null)return r}},Ze=e=>{let t=e.length===5&&e.substr(4,1)==="0",n=e.length===9&&e.substr(7,2)==="00";return t||n||e===u.transparent},Do=e=>e.fillStyle!=="solid"||Ze(e.backgroundColor),oe=()=>{let e,t,n=new Promise((r,s)=>{e=r,t=s});return n.resolve=e,n.reject=t,n},Uo=(e,t)=>{let n=[{value:1,symbol:"b"},{value:1e3,symbol:"k"},{value:1e6,symbol:"M"},{value:1e9,symbol:"G"}],r=/\.0+$|(\.[0-9]*[1-9])0+$/,s;for(s=n.length-1;s>0&&!(e>=n[s].value);s--);return(e/n[s].value).toFixed(t).replace(r,"$1")+n[s].symbol},No=()=>document.querySelector('meta[name="version"]')?.content||te,ko=()=>{let t=document.createElement("canvas").getContext("2d");if(!t)return!1;let n=12;return t.fillStyle="#f00",t.textBaseline="top",t.font="32px Arial",t.fillText("\u{1F600}",0,0),t.getImageData(n,n,1,1).data[0]!==0},Ho=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},Ko=e=>{let t=e.parentElement;for(;t;){if(t.tabIndex>-1){t.focus();return}t=t.parentElement}},Bo=e=>{e.preventDefault(),e.returnValue=""},Go=e=>Array.from(e).map(t=>`0${t.toString(16)}`.slice(-2)).join(""),Wo=()=>D()?1:Date.now(),Yo=e=>e instanceof Map?e:e.reduce((t,n)=>(t.set(typeof n=="string"?n:n.id,n),t),new Map),Vo=e=>e.reduce((t,n,r)=>(t.set(n.id,[n,r]),t),new Map),Xo=(e,t)=>e.reduce((n,r,s)=>(n[t?t(r):s]=r,n),{}),$o=e=>e.reduce((t,n,r)=>{let s={...n,prev:null,next:null};if(r!==0){let l=t[r-1];if(s.prev=l,l.next=s,r===e.length-1){let i=t[0];s.next=i,i.prev=s}}return t.push(s),t},[]),qe=e=>Array.isArray(e)?e:e.values(),zo=e=>Array.isArray(e)?e:Array.from(qe(e)),D=()=>f.MODE===I.TEST,jo=()=>f.MODE===I.DEVELOPMENT,Zo=()=>f.MODE===I.PRODUCTION,qo=()=>typeof process<"u"&&!0,Qo=(e,t)=>new CustomEvent(e,{detail:{nativeEvent:t},cancelable:!0}),Jo=(e,t)=>{let n=!1;for(let r in t){let s=t[r];if(typeof s<"u"){if(e[r]===s&&(typeof s!="object"||s===null))continue;n=!0}}return n?{...e,...t}:e},es=e=>{let t=typeof e;return e==null||t!=="object"&&t!=="function"},Qe=()=>{try{return window.self===window.top?"top":"iframe"}catch{return"iframe"}},ts=()=>Qe()==="iframe",ns=e=>!!e&&typeof e=="object"&&"then"in e&&"catch"in e&&"finally"in e,rs=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):[]},fe=(e,t)=>Array.isArray(e)&&Array.isArray(t)&&e.length===0&&t.length===0?!0:e===t,Je=(e,t,n,r=!1)=>{let s=Object.keys(e),l=Object.keys(t);if(s.length!==l.length)return r&&console.warn("%cisShallowEqual: objects don't have same properties ->","color: #8B4000",e,t),!1;if(n&&Array.isArray(n)){for(let i of n)if(!(e[i]===t[i]||fe(e[i],t[i])))return r&&console.warn(`%cisShallowEqual: ${i} not equal ->`,"color: #8B4000",e[i],t[i]),!1;return!0}return s.every(i=>{let o=n?.[i],a=o?o(e[i],t[i]):e[i]===t[i]||fe(e[i],t[i]);return!a&&r&&console.warn(`%cisShallowEqual: ${i} not equal ->`,"color: #8B4000",e[i],t[i]),a})},os=(e,t,{checkForDefaultPrevented:n=!0}={})=>function(s){if(e?.(s),!n||!s?.defaultPrevented)return t?.(s)},ss=(e,t,n)=>{if(!t)return e;if(n)return console.error(t),e;throw new Error(t)};function is(e,t){if(!e)throw new Error(t)}var as=e=>{let t,n,r=function(s){let l=Object.entries(s);if(t){let o=!0;for(let[a,p]of l)if(t.get(a)!==p){o=!1;break}if(o)return n}let i=e(s);return t=new Map(l),n=i,i};return r.clear=()=>{t=void 0,n=void 0},r},ls=(e,t)=>e instanceof Set||e instanceof Map?e.has(t):"includes"in e?e.includes(t):e.hasOwnProperty(t),cs=e=>JSON.parse(JSON.stringify(e)),us=(e,t)=>Je(e,t)?e:t;function ps(e,t,n,r){return e?(e?.addEventListener?.(t,n,r),()=>{e?.removeEventListener?.(t,n,r)}):()=>{}}function ds(e,t=!0){let n=e.length;if(n<4)return"";let r=e[0],s=e[1],l=e[2],i=`M${r[0].toFixed(2)},${r[1].toFixed(2)} Q${s[0].toFixed(2)},${s[1].toFixed(2)} ${P(s[0],l[0]).toFixed(2)},${P(s[1],l[1]).toFixed(2)} T`;for(let o=2,a=n-1;o<a;o++)r=e[o],s=e[o+1],i+=`${P(r[0],s[0]).toFixed(2)},${P(r[1],s[1]).toFixed(2)} `;return t&&(i+="Z"),i}var fs=e=>e.replace(/\r?\n|\r/g,`
4
+ `),Ts=e=>e,se=async(e,...t)=>new Promise(n=>{n(e(...t))}),ms=(...e)=>Math.max(...e.map(t=>t?1:0))>0,Es=e=>{try{return JSON.parse(e)}catch{return null}},me=e=>e.replace(/"/g,"&quot;"),xs=e=>Array.isArray(e)?e:[e],et=e=>Array.isArray(e),tt=e=>et(e)?e.length:e instanceof Map||e instanceof Set?e.size:Object.keys(e).length,bs=(e,t)=>{if(tt(e)===0)return null;let n=t||(s=>s),r=null;for(let s of e){let l=n(s);if((r===null||r===l)&&l!=null)r=l;else return null}return r};var Ee=new S(Date.now()),xe=0,Ls=()=>Math.floor(Ee.next()*2**31),Ss=e=>{Ee=new S(e),xe=0},Os=()=>D()?`id${xe++}`:pe();c();var _e=X(be(),1);var pt=e=>(e=e.trim(),e&&(0,_e.sanitizeUrl)(me(e))),Is=e=>!!(e?.includes(location.origin)||e?.startsWith("/")),Ms=e=>{if(e=pt(e),e.startsWith("/"))return`${location.origin}${e}`;try{new URL(e)}catch{return"about:blank"}return e};c();var Ae=class{subscribers=[];on(...t){let n=t.flat().filter(r=>typeof r=="function");return this.subscribers.push(...n),()=>this.off(n)}once(...t){let n=t.flat().filter(s=>typeof s=="function");n.push(()=>r());let r=this.on(...n);return r}off(...t){let n=t.flat();this.subscribers=this.subscribers.filter(r=>!n.includes(r))}trigger(...t){for(let n of this.subscribers)n(...t);return this}clear(){this.subscribers=[]}};export{wn as ACTIVE_THRESHOLD,En as ALLOWED_PASTE_MIME_TYPES,Kt as APP_NAME,qn as ARROW_LABEL_FONT_SIZE_TO_MIN_WIDTH_RATIO,Zn as ARROW_LABEL_WIDTH_FRACTION,Tr as ARROW_TYPE,jn as BOUND_TEXT_PADDING,$ as BinaryHeap,fn as CANVAS_ONLY_ACTIONS,yt as CANVAS_PALETTE_SHADE_INDEXES,ir as CANVAS_SEARCH_TAB,q as CJK_HAND_DRAWN_FALLBACK_FONT,en as CLASSES,ie as CODES,At as COLORS_PER_ROW,pn as COLOR_CHARCOAL_BLACK,bt as COLOR_OUTLINE_CONTRAST_THRESHOLD,u as COLOR_PALETTE,dn as COLOR_VOICE_CALL,un as COLOR_WHITE,Zt as CURSOR_TYPE,nr as DEFAULT_ADAPTIVE_RADIUS,St as DEFAULT_CANVAS_BACKGROUND_PICKS,ht as DEFAULT_CHART_COLOR_INDEX,cn as DEFAULT_COLLISION_THRESHOLD,F as DEFAULT_ELEMENT_BACKGROUND_COLOR_INDEX,Rt as DEFAULT_ELEMENT_BACKGROUND_COLOR_PALETTE,Lt as DEFAULT_ELEMENT_BACKGROUND_PICKS,sr as DEFAULT_ELEMENT_PROPS,C as DEFAULT_ELEMENT_STROKE_COLOR_INDEX,Ot as DEFAULT_ELEMENT_STROKE_COLOR_PALETTE,gt as DEFAULT_ELEMENT_STROKE_PICKS,Gn as DEFAULT_EXPORT_PADDING,pr as DEFAULT_FILENAME,sn as DEFAULT_FONT_FAMILY,on as DEFAULT_FONT_SIZE,Tn as DEFAULT_GRID_SIZE,mn as DEFAULT_GRID_STEP,jt as DEFAULT_LASER_COLOR,Wn as DEFAULT_MAX_IMAGE_WIDTH_OR_HEIGHT,tr as DEFAULT_PROPORTIONAL_RADIUS,mr as DEFAULT_REDUCED_GLOBAL_ALPHA,ar as DEFAULT_SIDEBAR,an as DEFAULT_TEXT_ALIGN,Ue as DEFAULT_TRANSFORM_HANDLE_SPACING,Dn as DEFAULT_UI_OPTIONS,te as DEFAULT_VERSION,ln as DEFAULT_VERTICAL_ALIGN,_r as DOUBLE_TAP_POSITION_THRESHOLD,Gt as DRAGGING_THRESHOLD,ur as EDITOR_LS_KEYS,E as ELEMENTS_PALETTE_SHADE_INDEXES,Er as ELEMENT_LINK_KEY,er as ELEMENT_READY_TO_ERASE_OPACITY,Vt as ELEMENT_SHIFT_TRANSLATE_AMOUNT,Xt as ELEMENT_TRANSLATE_AMOUNT,$n as ENCRYPTION_KEY_BITS,I as ENV,ke as EPSILON,Me as EVENT,bn as EXPORT_DATA_TYPES,xn as EXPORT_IMAGE_TYPES,Bn as EXPORT_SCALES,Ae as Emitter,T as FONT_FAMILY,B as FONT_FAMILY_FALLBACKS,Pe as FONT_FAMILY_GENERIC_FALLBACKS,M as FONT_METADATA,nn as FRAME_STYLE,gr as GOOGLE_FONTS_RANGES,Cn as HYPERLINK_TOOLTIP_DELAY,Fn as IDLE_THRESHOLD,ne as IMAGE_MIME_TYPES,An as IMAGE_RENDER_TIMEOUT,y as KEYS,Ge as KeyCodeMap,lr as LIBRARY_DISABLED_TYPES,Ke as LIBRARY_SIDEBAR_TAB,Yt as LINE_CONFIRM_THRESHOLD,br as LINE_POLYGON_POINT_MERGE_DISTANCE,Lr as LOCAL_FONT_PROTOCOL,Yn as MAX_ALLOWED_FILE_BYTES,_t as MAX_CUSTOM_COLORS_USED_IN_CANVAS,Kn as MAX_DECIMALS_FOR_SVG_EXPORT,vn as MAX_ZOOM,Z as MIME_TYPES,Wt as MINIMUM_ARROW_SIZE,rn as MIN_FONT_SIZE,fr as MIN_WIDTH_OR_HEIGHT,Rn as MIN_ZOOM,J as MONOSPACE_GENERIC_FONT,kn as MQ_MAX_HEIGHT_LANDSCAPE,Nn as MQ_MAX_WIDTH_LANDSCAPE,Un as MQ_MAX_WIDTH_PORTRAIT,Hn as MQ_RIGHT_SIDEBAR_MIN_WIDTH,xr as ORIG_ID,qt as POINTER_BUTTON,Qt as POINTER_EVENTS,ce as PromisePool,re as Queue,He as ROUGHNESS,rr as ROUNDNESS,Q as SANS_SERIF_GENERIC_FONT,Sn as SCROLL_TIMEOUT,zt as SHIFT_LOCKING_ANGLE,Ne as SIDE_RESIZING_THRESHOLD,dr as STATS_PANELS,or as STROKE_WIDTH,Xn as SVG_DOCUMENT_PREAMBLE,Vn as SVG_NS,hn as TAP_TWICE_TIMEOUT,Jn as TEXT_ALIGN,Bt as TEXT_AUTOWRAP_THRESHOLD,$t as TEXT_TO_CENTER_SNAP_THRESHOLD,tn as THEME,In as THEME_FILTER,gn as TITLE_TIMEOUT,cr as TOOL_TYPE,yn as TOUCH_CTX_MENU_TIMEOUT,Pn as URL_HASH_KEYS,Mn as URL_QUERY_KEYS,Be as UserIdleState,zn as VERSIONS,Ln as VERSION_TIMEOUT,Qn as VERTICAL_ALIGN,L as WINDOWS_EMOJI_FALLBACK_FONT,Jt as YOUTUBE_STATES,On as ZOOM_STEP,ps as addEventListener,go as allowFullScreen,$o as arrayToList,Yo as arrayToMap,Vo as arrayToMapWithIndex,Xo as arrayToObject,ss as assertNever,Go as bytesToHexString,lo as capitalizeString,xs as castArray,xo as chunk,cs as cloneJSON,os as composeEventHandlers,To as debounce,Ao as distance,Te as easeOut,Eo as easeToValuesRAF,me as escapeDoubleQuotes,Lo as exitFullScreen,Io as findIndex,Mo as findLastIndex,Ko as focusNearestParent,vt as getAllColorsSpecificShade,ao as getDateTime,_n as getExportSource,ee as getFontFamilyFallbacks,Xe as getFontFamilyString,fo as getFontString,Qe as getFrame,De as getGenericFontFamilyFallback,vo as getGlobalCSSVariable,Wr as getGridPoint,Or as getLineHeight,Ho as getNearestScrollableContainer,So as getShortcutKey,Br as getSizeFromPoints,x as getSpecificColorShades,ds as getSvgPathFromStroke,Wo as getUpdatedTimestamp,No as getVersion,Sr as getVerticalOffset,is as invariant,Pt as isAndroid,ms as isAnyTrue,Pr as isArrowKey,Do as isBindingFallthroughEnabled,Nt as isBrave,we as isChrome,w as isDarwin,jo as isDevEnv,Dt as isFirefox,yo as isFullScreen,Ie as isIOS,Ve as isInputLike,uo as isInteractive,We as isLatinChar,Is as isLocalLink,ls as isMemberOf,kt as isMobile,es as isPrimitive,Zo as isProdEnv,ns as isPromiseLike,Co as isRTL,et as isReadonlyArray,ts as isRunningInIframe,Ut as isSafari,qo as isServerEnv,Je as isShallowEqual,D as isTestEnv,co as isToolIcon,Ze as isTransparent,Mt as isWindows,po as isWritableElement,Po as mapFind,Mr as matchKey,as as memoize,wo as muteFSAbortError,Uo as nFormatter,fs as normalizeEOL,pt as normalizeLink,Bo as preventUnload,se as promiseTry,rs as queryFocusableElements,Os as randomId,Ls as randomInteger,bs as reduceToCommonValue,_o as removeSelection,Gr as rescalePoints,Ss as reseed,oe as resolvablePromise,Ct as rgbToHex,Es as safelyParseJSON,Ro as sceneCoordsToViewportCoords,bo as selectNode,io as setDateTimeForTests,Ur as shouldMaintainAspectRatio,Dr as shouldResizeFromCenter,Nr as shouldRotateWithDiscreteAngle,tt as sizeOf,ko as supportsEmoji,Ht as supportsResizeObserver,mo as throttleRAF,zo as toArray,Ts as toBrandedType,qe as toIterable,Ms as toValidURL,Fo as tupleToCoors,ho as updateActiveTool,Jo as updateObject,us as updateStable,Oo as viewportCoordsToSceneCoords,Qo as wrapEvent};
@@ -8,10 +8,12 @@ export declare const isChrome: boolean;
8
8
  export declare const isSafari: boolean;
9
9
  export declare const isIOS: boolean;
10
10
  export declare const isBrave: () => boolean;
11
+ export declare const isMobile: boolean;
11
12
  export declare const supportsResizeObserver: boolean;
12
13
  export declare const APP_NAME = "Excalidraw";
13
14
  export declare const TEXT_AUTOWRAP_THRESHOLD = 36;
14
15
  export declare const DRAGGING_THRESHOLD = 10;
16
+ export declare const MINIMUM_ARROW_SIZE = 20;
15
17
  export declare const LINE_CONFIRM_THRESHOLD = 8;
16
18
  export declare const ELEMENT_SHIFT_TRANSLATE_AMOUNT = 5;
17
19
  export declare const ELEMENT_TRANSLATE_AMOUNT = 1;
@@ -341,3 +343,4 @@ export declare enum UserIdleState {
341
343
  * the start and end points)
342
344
  */
343
345
  export declare const LINE_POLYGON_POINT_MERGE_DISTANCE = 20;
346
+ export declare const DOUBLE_TAP_POSITION_THRESHOLD = 35;
@@ -27,7 +27,9 @@ export declare class Scene {
27
27
  getElementsMapIncludingDeleted(): Map<string, Ordered<ExcalidrawElement>> & import("@excalidraw/common/utility-types").MakeBrand<"SceneElementsMap">;
28
28
  getNonDeletedElements(): readonly Ordered<NonDeletedExcalidrawElement>[];
29
29
  getFramesIncludingDeleted(): readonly ExcalidrawFrameLikeElement[];
30
- constructor(elements?: ElementsMapOrArray | null);
30
+ constructor(elements?: ElementsMapOrArray | null, options?: {
31
+ skipValidation?: true;
32
+ });
31
33
  getSelectedElements(opts: {
32
34
  selectedElementIds: AppState["selectedElementIds"];
33
35
  /**
@@ -55,7 +57,9 @@ export declare class Scene {
55
57
  * @returns whether a change was made
56
58
  */
57
59
  mapElements(iteratee: (element: ExcalidrawElement) => ExcalidrawElement): boolean;
58
- replaceAllElements(nextElements: ElementsMapOrArray): void;
60
+ replaceAllElements(nextElements: ElementsMapOrArray, options?: {
61
+ skipValidation?: true;
62
+ }): void;
59
63
  triggerUpdate(): void;
60
64
  onUpdate(cb: SceneStateCallback): SceneStateCallbackRemover;
61
65
  destroy(): void;
@@ -29,12 +29,16 @@ export declare class Delta<T> {
29
29
  }>(prevObject: T, nextObject: T, modifier?: (partial: Partial<T>) => Partial<T>, postProcess?: (deleted: Partial<T>, inserted: Partial<T>) => [Partial<T>, Partial<T>]): Delta<T>;
30
30
  static empty(): Delta<unknown>;
31
31
  static isEmpty<T>(delta: Delta<T>): boolean;
32
+ /**
33
+ * Merges two deltas into a new one.
34
+ */
35
+ static merge<T>(delta1: Delta<T>, delta2: Delta<T>, delta3?: Delta<T>): Delta<T>;
32
36
  /**
33
37
  * Merges deleted and inserted object partials.
34
38
  */
35
39
  static mergeObjects<T extends {
36
40
  [key: string]: unknown;
37
- }>(prev: T, added: T, removed: T): T;
41
+ }>(prev: T, added: T, removed?: T): T;
38
42
  /**
39
43
  * Merges deleted and inserted array partials.
40
44
  */
@@ -102,18 +106,24 @@ export interface DeltaContainer<T> {
102
106
  * @returns a tuple of the next object `T` with applied `Delta`s, and `boolean`, indicating whether the applied deltas resulted in a visible change.
103
107
  */
104
108
  applyTo(previous: T, ...options: unknown[]): [T, boolean];
109
+ /**
110
+ * Squashes the current delta with the given one.
111
+ */
112
+ squash(delta: DeltaContainer<T>): this;
105
113
  /**
106
114
  * Checks whether all `Delta`s are empty.
107
115
  */
108
116
  isEmpty(): boolean;
109
117
  }
110
118
  export declare class AppStateDelta implements DeltaContainer<AppState> {
111
- readonly delta: Delta<ObservedAppState>;
119
+ delta: Delta<ObservedAppState>;
112
120
  private constructor();
121
+ static create(delta: Delta<ObservedAppState>): AppStateDelta;
113
122
  static calculate<T extends ObservedAppState>(prevAppState: T, nextAppState: T): AppStateDelta;
114
123
  static restore(appStateDeltaDTO: DTO<AppStateDelta>): AppStateDelta;
115
124
  static empty(): AppStateDelta;
116
125
  inverse(): AppStateDelta;
126
+ squash(delta: AppStateDelta): this;
117
127
  applyTo(appState: AppState, nextElements: SceneElementsMap): [AppState, boolean];
118
128
  isEmpty(): boolean;
119
129
  /**
@@ -122,7 +132,6 @@ export declare class AppStateDelta implements DeltaContainer<AppState> {
122
132
  * @returns `true` if a visible change is found, `false` otherwise.
123
133
  */
124
134
  private filterInvisibleChanges;
125
- private static convertToAppStateKey;
126
135
  private static filterSelectedElements;
127
136
  private static filterSelectedGroups;
128
137
  private static stripElementsProps;
@@ -136,7 +145,7 @@ export declare class AppStateDelta implements DeltaContainer<AppState> {
136
145
  }
137
146
  type ElementPartial<TElement extends ExcalidrawElement = ExcalidrawElement> = Omit<Partial<Ordered<TElement>>, "id" | "updated" | "seed">;
138
147
  export type ApplyToOptions = {
139
- excludedProperties: Set<keyof ElementPartial>;
148
+ excludedProperties?: Set<keyof ElementPartial>;
140
149
  };
141
150
  /**
142
151
  * Elements change is a low level primitive to capture a change between two sets of elements.
@@ -155,6 +164,7 @@ export declare class ElementsDelta implements DeltaContainer<SceneElementsMap> {
155
164
  private static satisfiesRemoval;
156
165
  private static satisfiesUpdate;
157
166
  private static satisfiesCommmonInvariants;
167
+ private static satisfiesUniqueInvariants;
158
168
  private static validate;
159
169
  /**
160
170
  * Calculates the `Delta`s between the previous and next set of elements.
@@ -177,6 +187,7 @@ export declare class ElementsDelta implements DeltaContainer<SceneElementsMap> {
177
187
  */
178
188
  applyLatestChanges(prevElements: SceneElementsMap, nextElements: SceneElementsMap, modifierOptions?: "deleted" | "inserted"): ElementsDelta;
179
189
  applyTo(elements: SceneElementsMap, snapshot?: StoreSnapshot["elements"], options?: ApplyToOptions): [SceneElementsMap, boolean];
190
+ squash(delta: ElementsDelta): this;
180
191
  private static createApplier;
181
192
  private static createGetter;
182
193
  private static applyDelta;
@@ -203,6 +214,7 @@ export declare class ElementsDelta implements DeltaContainer<SceneElementsMap> {
203
214
  * should be rebound (if possible) with the current element ~ bindings should be bidirectional.
204
215
  */
205
216
  private static rebindAffected;
217
+ static redrawElements(nextElements: SceneElementsMap, changedElements: Map<string, OrderedExcalidrawElement>): SceneElementsMap;
206
218
  private static redrawTextBoundingBoxes;
207
219
  private static redrawBoundArrows;
208
220
  private static reorderElements;
@@ -39,7 +39,8 @@ export declare class LinearElementEditor {
39
39
  readonly segmentMidPointHoveredCoords: GlobalPoint | null;
40
40
  readonly elbowed: boolean;
41
41
  readonly customLineAngle: number | null;
42
- constructor(element: NonDeleted<ExcalidrawLinearElement>, elementsMap: ElementsMap);
42
+ readonly isEditing: boolean;
43
+ constructor(element: NonDeleted<ExcalidrawLinearElement>, elementsMap: ElementsMap, isEditing?: boolean);
43
44
  static POINT_HANDLE_SIZE: number;
44
45
  /**
45
46
  * @param id the `elementId` from the instance of this class (so that we can
@@ -169,7 +169,11 @@ export declare class StoreDelta {
169
169
  /**
170
170
  * Parse and load the delta from the remote payload.
171
171
  */
172
- static load({ id, elements: { added, removed, updated }, }: DTO<StoreDelta>): StoreDelta;
172
+ static load({ id, elements: { added, removed, updated }, appState: { delta: appStateDelta }, }: DTO<StoreDelta>): StoreDelta;
173
+ /**
174
+ * Squash the passed deltas into the aggregated delta instance.
175
+ */
176
+ static squash(...deltas: StoreDelta[]): StoreDelta;
173
177
  /**
174
178
  * Inverse store delta, creates new instance of `StoreDelta`.
175
179
  */
@@ -182,6 +186,7 @@ export declare class StoreDelta {
182
186
  * Apply latest (remote) changes to the delta, creates new instance of `StoreDelta`.
183
187
  */
184
188
  static applyLatestChanges(delta: StoreDelta, prevElements: SceneElementsMap, nextElements: SceneElementsMap, modifierOptions?: "deleted" | "inserted"): StoreDelta;
189
+ static empty(): StoreDelta;
185
190
  isEmpty(): boolean;
186
191
  }
187
192
  /**
@@ -39,7 +39,6 @@ export declare const actionAddToLibrary: {
39
39
  editingFrame: string | null;
40
40
  elementsToHighlight: import("../../element/src/types").NonDeleted<import("../../element/src/types").ExcalidrawElement>[] | null;
41
41
  editingTextElement: import("../../element/src/types").NonDeletedExcalidrawElement | null;
42
- editingLinearElement: import("@excalidraw/element").LinearElementEditor | null;
43
42
  activeTool: {
44
43
  lastActiveTool: import("../types").ActiveTool | null;
45
44
  locked: boolean;
@@ -207,7 +206,6 @@ export declare const actionAddToLibrary: {
207
206
  editingFrame: string | null;
208
207
  elementsToHighlight: import("../../element/src/types").NonDeleted<import("../../element/src/types").ExcalidrawElement>[] | null;
209
208
  editingTextElement: import("../../element/src/types").NonDeletedExcalidrawElement | null;
210
- editingLinearElement: import("@excalidraw/element").LinearElementEditor | null;
211
209
  activeTool: {
212
210
  lastActiveTool: import("../types").ActiveTool | null;
213
211
  locked: boolean;
@@ -380,7 +378,6 @@ export declare const actionAddToLibrary: {
380
378
  editingFrame: string | null;
381
379
  elementsToHighlight: import("../../element/src/types").NonDeleted<import("../../element/src/types").ExcalidrawElement>[] | null;
382
380
  editingTextElement: import("../../element/src/types").NonDeletedExcalidrawElement | null;
383
- editingLinearElement: import("@excalidraw/element").LinearElementEditor | null;
384
381
  activeTool: {
385
382
  lastActiveTool: import("../types").ActiveTool | null;
386
383
  locked: boolean;
@@ -59,7 +59,6 @@ export declare const actionBindText: {
59
59
  editingFrame: string | null;
60
60
  elementsToHighlight: import("@excalidraw/element/types").NonDeleted<ExcalidrawElement>[] | null;
61
61
  editingTextElement: import("@excalidraw/element/types").NonDeletedExcalidrawElement | null;
62
- editingLinearElement: import("@excalidraw/element").LinearElementEditor | null;
63
62
  activeTool: {
64
63
  lastActiveTool: import("../types").ActiveTool | null;
65
64
  locked: boolean;
@@ -244,7 +243,6 @@ export declare const actionWrapTextInContainer: {
244
243
  editingFrame: string | null;
245
244
  elementsToHighlight: import("@excalidraw/element/types").NonDeleted<ExcalidrawElement>[] | null;
246
245
  editingTextElement: import("@excalidraw/element/types").NonDeletedExcalidrawElement | null;
247
- editingLinearElement: import("@excalidraw/element").LinearElementEditor | null;
248
246
  activeTool: {
249
247
  lastActiveTool: import("../types").ActiveTool | null;
250
248
  locked: boolean;
@@ -85,7 +85,6 @@ export declare const actionClearCanvas: {
85
85
  element: import("@excalidraw/element/types").NonDeletedExcalidrawElement;
86
86
  state: "active" | "hover";
87
87
  } | null;
88
- editingLinearElement: import("@excalidraw/element").LinearElementEditor | null;
89
88
  selectionElement: import("@excalidraw/element/types").NonDeletedExcalidrawElement | null;
90
89
  selectedGroupIds: {
91
90
  [groupId: string]: boolean;
@@ -162,6 +161,7 @@ export declare const actionClearCanvas: {
162
161
  openPopup: "fontFamily" | "canvasBackground" | "elementBackground" | "elementStroke" | null;
163
162
  openSidebar: {
164
163
  name: string;
164
+ /** zoom content to cover X of the viewport, when fitToViewport=true */
165
165
  tab?: string | undefined;
166
166
  } | null;
167
167
  defaultSidebarDockedPreference: boolean;
@@ -243,7 +243,6 @@ export declare const actionZoomIn: {
243
243
  editingFrame: string | null;
244
244
  elementsToHighlight: import("@excalidraw/element/types").NonDeleted<ExcalidrawElement>[] | null;
245
245
  editingTextElement: import("@excalidraw/element/types").NonDeletedExcalidrawElement | null;
246
- editingLinearElement: import("@excalidraw/element").LinearElementEditor | null;
247
246
  activeTool: {
248
247
  lastActiveTool: import("../types").ActiveTool | null;
249
248
  locked: boolean;
@@ -280,6 +279,7 @@ export declare const actionZoomIn: {
280
279
  openPopup: "fontFamily" | "canvasBackground" | "elementBackground" | "elementStroke" | null;
281
280
  openSidebar: {
282
281
  name: string;
282
+ /** zoom content to cover X of the viewport, when fitToViewport=true */
283
283
  tab?: string | undefined;
284
284
  } | null;
285
285
  openDialog: {
@@ -430,7 +430,6 @@ export declare const actionZoomOut: {
430
430
  editingFrame: string | null;
431
431
  elementsToHighlight: import("@excalidraw/element/types").NonDeleted<ExcalidrawElement>[] | null;
432
432
  editingTextElement: import("@excalidraw/element/types").NonDeletedExcalidrawElement | null;
433
- editingLinearElement: import("@excalidraw/element").LinearElementEditor | null;
434
433
  activeTool: {
435
434
  lastActiveTool: import("../types").ActiveTool | null;
436
435
  locked: boolean;
@@ -467,6 +466,7 @@ export declare const actionZoomOut: {
467
466
  openPopup: "fontFamily" | "canvasBackground" | "elementBackground" | "elementStroke" | null;
468
467
  openSidebar: {
469
468
  name: string;
469
+ /** zoom content to cover X of the viewport, when fitToViewport=true */
470
470
  tab?: string | undefined;
471
471
  } | null;
472
472
  openDialog: {
@@ -617,7 +617,6 @@ export declare const actionResetZoom: {
617
617
  editingFrame: string | null;
618
618
  elementsToHighlight: import("@excalidraw/element/types").NonDeleted<ExcalidrawElement>[] | null;
619
619
  editingTextElement: import("@excalidraw/element/types").NonDeletedExcalidrawElement | null;
620
- editingLinearElement: import("@excalidraw/element").LinearElementEditor | null;
621
620
  activeTool: {
622
621
  lastActiveTool: import("../types").ActiveTool | null;
623
622
  locked: boolean;
@@ -654,6 +653,7 @@ export declare const actionResetZoom: {
654
653
  openPopup: "fontFamily" | "canvasBackground" | "elementBackground" | "elementStroke" | null;
655
654
  openSidebar: {
656
655
  name: string;
656
+ /** zoom content to cover X of the viewport, when fitToViewport=true */
657
657
  tab?: string | undefined;
658
658
  } | null;
659
659
  openDialog: {
@@ -810,7 +810,6 @@ export declare const zoomToFitBounds: ({ bounds, appState, canvasOffsets, fitToV
810
810
  editingFrame: string | null;
811
811
  elementsToHighlight: import("@excalidraw/element/types").NonDeleted<ExcalidrawElement>[] | null;
812
812
  editingTextElement: import("@excalidraw/element/types").NonDeletedExcalidrawElement | null;
813
- editingLinearElement: import("@excalidraw/element").LinearElementEditor | null;
814
813
  activeTool: {
815
814
  lastActiveTool: import("../types").ActiveTool | null;
816
815
  locked: boolean;
@@ -847,6 +846,7 @@ export declare const zoomToFitBounds: ({ bounds, appState, canvasOffsets, fitToV
847
846
  openPopup: "fontFamily" | "canvasBackground" | "elementBackground" | "elementStroke" | null;
848
847
  openSidebar: {
849
848
  name: string;
849
+ /** zoom content to cover X of the viewport, when fitToViewport=true */
850
850
  tab?: string | undefined;
851
851
  } | null;
852
852
  openDialog: {
@@ -999,7 +999,6 @@ export declare const zoomToFit: ({ canvasOffsets, targetElements, appState, fitT
999
999
  editingFrame: string | null;
1000
1000
  elementsToHighlight: import("@excalidraw/element/types").NonDeleted<ExcalidrawElement>[] | null;
1001
1001
  editingTextElement: import("@excalidraw/element/types").NonDeletedExcalidrawElement | null;
1002
- editingLinearElement: import("@excalidraw/element").LinearElementEditor | null;
1003
1002
  activeTool: {
1004
1003
  lastActiveTool: import("../types").ActiveTool | null;
1005
1004
  locked: boolean;
@@ -1036,6 +1035,7 @@ export declare const zoomToFit: ({ canvasOffsets, targetElements, appState, fitT
1036
1035
  openPopup: "fontFamily" | "canvasBackground" | "elementBackground" | "elementStroke" | null;
1037
1036
  openSidebar: {
1038
1037
  name: string;
1038
+ /** zoom content to cover X of the viewport, when fitToViewport=true */
1039
1039
  tab?: string | undefined;
1040
1040
  } | null;
1041
1041
  openDialog: {
@@ -1180,7 +1180,6 @@ export declare const actionZoomToFitSelectionInViewport: {
1180
1180
  editingFrame: string | null;
1181
1181
  elementsToHighlight: import("@excalidraw/element/types").NonDeleted<ExcalidrawElement>[] | null;
1182
1182
  editingTextElement: import("@excalidraw/element/types").NonDeletedExcalidrawElement | null;
1183
- editingLinearElement: import("@excalidraw/element").LinearElementEditor | null;
1184
1183
  activeTool: {
1185
1184
  lastActiveTool: import("../types").ActiveTool | null;
1186
1185
  locked: boolean;
@@ -1217,6 +1216,7 @@ export declare const actionZoomToFitSelectionInViewport: {
1217
1216
  openPopup: "fontFamily" | "canvasBackground" | "elementBackground" | "elementStroke" | null;
1218
1217
  openSidebar: {
1219
1218
  name: string;
1219
+ /** zoom content to cover X of the viewport, when fitToViewport=true */
1220
1220
  tab?: string | undefined;
1221
1221
  } | null;
1222
1222
  openDialog: {
@@ -1365,7 +1365,6 @@ export declare const actionZoomToFitSelection: {
1365
1365
  editingFrame: string | null;
1366
1366
  elementsToHighlight: import("@excalidraw/element/types").NonDeleted<ExcalidrawElement>[] | null;
1367
1367
  editingTextElement: import("@excalidraw/element/types").NonDeletedExcalidrawElement | null;
1368
- editingLinearElement: import("@excalidraw/element").LinearElementEditor | null;
1369
1368
  activeTool: {
1370
1369
  lastActiveTool: import("../types").ActiveTool | null;
1371
1370
  locked: boolean;
@@ -1402,6 +1401,7 @@ export declare const actionZoomToFitSelection: {
1402
1401
  openPopup: "fontFamily" | "canvasBackground" | "elementBackground" | "elementStroke" | null;
1403
1402
  openSidebar: {
1404
1403
  name: string;
1404
+ /** zoom content to cover X of the viewport, when fitToViewport=true */
1405
1405
  tab?: string | undefined;
1406
1406
  } | null;
1407
1407
  openDialog: {
@@ -1551,7 +1551,6 @@ export declare const actionZoomToFit: {
1551
1551
  editingFrame: string | null;
1552
1552
  elementsToHighlight: import("@excalidraw/element/types").NonDeleted<ExcalidrawElement>[] | null;
1553
1553
  editingTextElement: import("@excalidraw/element/types").NonDeletedExcalidrawElement | null;
1554
- editingLinearElement: import("@excalidraw/element").LinearElementEditor | null;
1555
1554
  activeTool: {
1556
1555
  lastActiveTool: import("../types").ActiveTool | null;
1557
1556
  locked: boolean;
@@ -1588,6 +1587,7 @@ export declare const actionZoomToFit: {
1588
1587
  openPopup: "fontFamily" | "canvasBackground" | "elementBackground" | "elementStroke" | null;
1589
1588
  openSidebar: {
1590
1589
  name: string;
1590
+ /** zoom content to cover X of the viewport, when fitToViewport=true */
1591
1591
  tab?: string | undefined;
1592
1592
  } | null;
1593
1593
  openDialog: {
@@ -1734,7 +1734,6 @@ export declare const actionToggleTheme: {
1734
1734
  editingFrame: string | null;
1735
1735
  elementsToHighlight: import("@excalidraw/element/types").NonDeleted<ExcalidrawElement>[] | null;
1736
1736
  editingTextElement: import("@excalidraw/element/types").NonDeletedExcalidrawElement | null;
1737
- editingLinearElement: import("@excalidraw/element").LinearElementEditor | null;
1738
1737
  activeTool: {
1739
1738
  lastActiveTool: import("../types").ActiveTool | null;
1740
1739
  locked: boolean;
@@ -1776,6 +1775,7 @@ export declare const actionToggleTheme: {
1776
1775
  openPopup: "fontFamily" | "canvasBackground" | "elementBackground" | "elementStroke" | null;
1777
1776
  openSidebar: {
1778
1777
  name: string;
1778
+ /** zoom content to cover X of the viewport, when fitToViewport=true */
1779
1779
  tab?: string | undefined;
1780
1780
  } | null;
1781
1781
  openDialog: {
@@ -1887,7 +1887,7 @@ export declare const actionToggleEraserTool: {
1887
1887
  trackEvent: {
1888
1888
  category: "toolbar";
1889
1889
  };
1890
- perform: (elements: readonly import("@excalidraw/element/types").OrderedExcalidrawElement[], appState: Readonly<AppState>) => {
1890
+ perform: (elements: readonly import("@excalidraw/element/types").OrderedExcalidrawElement[], appState: Readonly<AppState>, _: any, app: import("../types").AppClassProperties) => {
1891
1891
  appState: {
1892
1892
  selectedElementIds: {};
1893
1893
  selectedGroupIds: {};
@@ -1922,7 +1922,6 @@ export declare const actionToggleEraserTool: {
1922
1922
  editingFrame: string | null;
1923
1923
  elementsToHighlight: import("@excalidraw/element/types").NonDeleted<ExcalidrawElement>[] | null;
1924
1924
  editingTextElement: import("@excalidraw/element/types").NonDeletedExcalidrawElement | null;
1925
- editingLinearElement: import("@excalidraw/element").LinearElementEditor | null;
1926
1925
  penMode: boolean;
1927
1926
  penDetected: boolean;
1928
1927
  exportBackground: boolean;
@@ -1959,6 +1958,7 @@ export declare const actionToggleEraserTool: {
1959
1958
  openPopup: "fontFamily" | "canvasBackground" | "elementBackground" | "elementStroke" | null;
1960
1959
  openSidebar: {
1961
1960
  name: string;
1961
+ /** zoom content to cover X of the viewport, when fitToViewport=true */
1962
1962
  tab?: string | undefined;
1963
1963
  } | null;
1964
1964
  openDialog: {
@@ -2065,6 +2065,7 @@ export declare const actionToggleLassoTool: {
2065
2065
  trackEvent: {
2066
2066
  category: "toolbar";
2067
2067
  };
2068
+ predicate: (elements: readonly ExcalidrawElement[], appState: AppState, props: import("../types").ExcalidrawProps, app: import("../types").AppClassProperties) => boolean;
2068
2069
  perform: (elements: readonly import("@excalidraw/element/types").OrderedExcalidrawElement[], appState: Readonly<AppState>, _: any, app: import("../types").AppClassProperties) => {
2069
2070
  appState: {
2070
2071
  selectedElementIds: {};
@@ -2100,7 +2101,6 @@ export declare const actionToggleLassoTool: {
2100
2101
  editingFrame: string | null;
2101
2102
  elementsToHighlight: import("@excalidraw/element/types").NonDeleted<ExcalidrawElement>[] | null;
2102
2103
  editingTextElement: import("@excalidraw/element/types").NonDeletedExcalidrawElement | null;
2103
- editingLinearElement: import("@excalidraw/element").LinearElementEditor | null;
2104
2104
  penMode: boolean;
2105
2105
  penDetected: boolean;
2106
2106
  exportBackground: boolean;
@@ -2137,6 +2137,7 @@ export declare const actionToggleLassoTool: {
2137
2137
  openPopup: "fontFamily" | "canvasBackground" | "elementBackground" | "elementStroke" | null;
2138
2138
  openSidebar: {
2139
2139
  name: string;
2140
+ /** zoom content to cover X of the viewport, when fitToViewport=true */
2140
2141
  tab?: string | undefined;
2141
2142
  } | null;
2142
2143
  openDialog: {
@@ -2278,7 +2279,6 @@ export declare const actionToggleHandTool: {
2278
2279
  editingFrame: string | null;
2279
2280
  elementsToHighlight: import("@excalidraw/element/types").NonDeleted<ExcalidrawElement>[] | null;
2280
2281
  editingTextElement: import("@excalidraw/element/types").NonDeletedExcalidrawElement | null;
2281
- editingLinearElement: import("@excalidraw/element").LinearElementEditor | null;
2282
2282
  penMode: boolean;
2283
2283
  penDetected: boolean;
2284
2284
  exportBackground: boolean;
@@ -2315,6 +2315,7 @@ export declare const actionToggleHandTool: {
2315
2315
  openPopup: "fontFamily" | "canvasBackground" | "elementBackground" | "elementStroke" | null;
2316
2316
  openSidebar: {
2317
2317
  name: string;
2318
+ /** zoom content to cover X of the viewport, when fitToViewport=true */
2318
2319
  tab?: string | undefined;
2319
2320
  } | null;
2320
2321
  openDialog: {