@excalidraw/common 0.18.0-39ce38a0d-200a6bd94 → 0.18.0-3bdaafe
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dev/index.js +7 -1
- package/dist/dev/index.js.map +2 -2
- package/dist/prod/index.js +3 -3
- package/dist/types/common/src/constants.d.ts +2 -0
- package/dist/types/element/src/Scene.d.ts +6 -2
- package/dist/types/element/src/bounds.d.ts +1 -1
- package/dist/types/element/src/delta.d.ts +6 -4
- package/dist/types/element/src/index.d.ts +1 -0
- package/dist/types/element/src/positionElementsOnGrid.d.ts +2 -0
- package/dist/types/element/src/store.d.ts +6 -1
- package/dist/types/element/src/textElement.d.ts +1 -1
- package/dist/types/excalidraw/actions/actionCanvas.d.ts +15 -1
- package/dist/types/excalidraw/clipboard.d.ts +1 -0
- package/dist/types/excalidraw/components/App.d.ts +11 -8
- package/dist/types/excalidraw/components/shapes.d.ts +129 -1
- package/dist/types/excalidraw/data/blob.d.ts +7 -4
- package/dist/types/excalidraw/data/restore.d.ts +6 -1
- package/dist/types/excalidraw/index.d.ts +1 -1
- package/dist/types/excalidraw/types.d.ts +5 -2
- package/package.json +1 -1
package/dist/prod/index.js
CHANGED
|
@@ -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 Re=(e,t)=>()=>(e&&(t=e(e=0)),t);var V=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Oe=(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)):{},Oe(t||!e||!e.__esModule?Y(n,"default",{value:e,enumerable:!0}):n,e));var f,c=Re(()=>{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=/^.+(:|:)/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},Rt={transparent:u.transparent,white:u.white,gray:u.gray,black:u.black,bronze:u.bronze,...j},Ot=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=20,Wt=8,Yt=5,Vt=1,Xt=30,$t=Math.PI/12,zt="red",jt={TEXT:"text",CROSSHAIR:"crosshair",GRABBING:"grabbing",GRAB:"grab",POINTER:"pointer",MOVE:"move",AUTO:""},Zt={MAIN:0,WHEEL:1,SECONDARY:2,TOUCH:-1,ERASER:5},qt={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"},Jt={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]}},en={LIGHT:"light",DARK:"dark"},tn={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},nn=1,rn=20,on=T.Excalifont,sn="left",an="top",te="{version}",De=2,Ue=2*De,Ne=1e-5,ln=2*Ue-Ne,cn="#ffffff",un="#1e1e1e",pn="#a2f1a6",dn=["selectAll"],fn=20,Tn=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},mn=[Z.text,Z.html,...Object.values(ne)],En={png:"png",svg:"svg",clipboard:"clipboard"},xn={excalidraw:"excalidraw",excalidrawClipboard:"excalidraw/clipboard",excalidrawLibrary:"excalidrawlib",excalidrawClipboardWithAPI:"excalidraw-api/clipboard"},bn=()=>window.EXCALIDRAW_EXPORT_SOURCE||window.location.origin,_n=500,An=300,hn=500,yn=1e4,gn=3e4,Ln=100,Sn=.1,Rn=.1,On=30,vn=300,Cn=6e4,Fn=3e3,wn="invert(93%) hue-rotate(180deg)",In={addLibrary:"addLibrary"},Mn={addLibrary:"addLibrary"},Pn={canvasActions:{changeViewBackgroundColor:!0,clearCanvas:!0,export:{saveFileToDisk:!0},loadScene:!0,saveToActiveFile:!0,toggleTheme:null,saveAsImage:!0},tools:{image:!0}},Dn=730,Un=1e3,Nn=500,kn=1229,Hn=2,Kn=[1,2,3],Bn=10,Gn=1440,Wn=4*1024*1024,Yn="http://www.w3.org/2000/svg",Vn=`<?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=/^.+(:|:)/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
|
-
`,Xn=128,$n={excalidraw:2,excalidrawLibrary:2},zn=5,jn=.7,Zn=11,qn={TOP:"top",MIDDLE:"middle",BOTTOM:"bottom"},Qn={LEFT:"left",CENTER:"center",RIGHT:"right"},Jn=20,er=.25,tr=32,nr={LEGACY:1,PROPORTIONAL_RADIUS:2,ADAPTIVE_RADIUS:3},ke={architect:0,artist:1,cartoonist:2},rr={thin:1,bold:2,extraBold:4},or={strokeColor:u.black,backgroundColor:u.transparent,fillStyle:"solid",strokeWidth:2,strokeStyle:"solid",roughness:ke.artist,opacity:100,locked:!1},He="library",sr="search",ir={name:"default",defaultTab:He},ar=new Set(["iframe","embeddable","image"]),lr={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"},cr={OAI_API_KEY:"excalidraw-oai-api-key",MERMAID_TO_EXCALIDRAW:"mermaid-to-excalidraw",PUBLISH_LIBRARY:"publish-library-data"},ur="Untitled",pr={generalStats:1,elementProperties:2},dr=1,fr={sharp:"sharp",round:"round",elbow:"elbow"},Tr=.3,mr="element",Er=Symbol.for("__test__originalId__"),Ke=(r=>(r.ACTIVE="active",r.AWAY="away",r.IDLE="idle",r))(Ke||{}),xr=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}},hr={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"},yr="local:",gr=(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},Lr=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()),wr=(e,t)=>{if(t===e.key.toLowerCase())return!0;let n=Be.get(t);return!!(n&&!Ge(e.key)&&e.code===n)},Ir=e=>e===y.ARROW_LEFT||e===y.ARROW_RIGHT||e===y.ARROW_DOWN||e===y.ARROW_UP,Mr=e=>e.altKey,Pr=e=>e.shiftKey,Dr=e=>e.shiftKey;c();import{pointFromPair as We}from"@excalidraw/math";var Hr=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)}},Kr=(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 R=i-p;return m.map(b=>We(b.map((_,A)=>A===e?_+R:_)))},Br=(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,oo=e=>{W=e},so=()=>{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}`},io=e=>e.charAt(0).toUpperCase()+e.slice(1),ao=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,lo=e=>Ye(e)||e instanceof Element&&!!e.closest("label, button"),co=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},uo=({fontSize:e,fontFamily:t})=>`${e}px ${Ve({fontFamily:t})}`,po=(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},fo=(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,To=({fromValues:e,toValues:t,onStep:n,duration:r=250,interpolateValue:s,onStart:l,onEnd:i,onCancel:o})=>{let a=!1,p=0,m;function R(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 O=k,H=e[O],K=t[O],v;v=s?s(H,K,g,O):de(H,K,g),v==null&&(v=de(H,K,g)),h[O]=v}),n(h),p=window.requestAnimationFrame(R)}else n(t),i?.()}return p=window.requestAnimationFrame(R),()=>{o?.(),a=!0,window.cancelAnimationFrame(p)}},mo=(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},Eo=e=>{let t=window.getSelection();if(t){let n=document.createRange();n.selectNodeContents(e),t.removeAllRanges(),t.addRange(n)}},xo=()=>{let e=window.getSelection();e&&e.removeAllRanges()},bo=(e,t)=>Math.abs(e-t),_o=(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},Ao=()=>document.fullscreenElement?.nodeName==="HTML",ho=()=>document.documentElement.requestFullscreen(),yo=()=>document.exitFullscreen(),go=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")),Lo=({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}},So=({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}},Ro=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),vo=e=>{let[t,n]=e;return{x:t,y:n}},Co=e=>{if(e?.name==="AbortError"){console.warn(e);return}throw e},Fo=(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},wo=(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},Io=(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},Mo=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},Po=(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},Do=()=>document.querySelector('meta[name="version"]')?.content||te,Uo=()=>{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},No=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}},Ho=e=>{e.preventDefault(),e.returnValue=""},Ko=e=>Array.from(e).map(t=>`0${t.toString(16)}`.slice(-2)).join(""),Bo=()=>D()?1:Date.now(),Go=e=>e instanceof Map?e:e.reduce((t,n)=>(t.set(typeof n=="string"?n:n.id,n),t),new Map),Wo=e=>e.reduce((t,n,r)=>(t.set(n.id,[n,r]),t),new Map),Yo=(e,t)=>e.reduce((n,r,s)=>(n[t?t(r):s]=r,n),{}),Vo=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(),Xo=e=>Array.isArray(e)?e:Array.from(Ze(e)),D=()=>f.MODE===I.TEST,$o=()=>f.MODE===I.DEVELOPMENT,zo=()=>f.MODE===I.PRODUCTION,jo=()=>typeof process<"u"&&!0,Zo=(e,t)=>new CustomEvent(e,{detail:{nativeEvent:t},cancelable:!0}),qo=(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"}},Jo=()=>qe()==="iframe",es=e=>!!e&&typeof e=="object"&&"then"in e&&"catch"in e&&"finally"in e,ts=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})},ns=(e,t,{checkForDefaultPrevented:n=!0}={})=>function(s){if(e?.(s),!n||!s?.defaultPrevented)return t?.(s)},rs=(e,t,n)=>{if(!t)return e;if(n)return console.error(t),e;throw new Error(t)};function os(e,t){if(!e)throw new Error(t)}var ss=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},is=(e,t)=>e instanceof Set||e instanceof Map?e.has(t):"includes"in e?e.includes(t):e.hasOwnProperty(t),as=e=>JSON.parse(JSON.stringify(e)),ls=(e,t)=>Qe(e,t)?e:t;function cs(e,t,n,r){return e?(e?.addEventListener?.(t,n,r),()=>{e?.removeEventListener?.(t,n,r)}):()=>{}}function us(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 ps=e=>e.replace(/\r?\n|\r/g,`
|
|
4
|
-
`),
|
|
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,"""),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,6 +8,7 @@ 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;
|
|
@@ -342,3 +343,4 @@ export declare enum UserIdleState {
|
|
|
342
343
|
* the start and end points)
|
|
343
344
|
*/
|
|
344
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
|
|
60
|
+
replaceAllElements(nextElements: ElementsMapOrArray, options?: {
|
|
61
|
+
skipValidation?: true;
|
|
62
|
+
}): void;
|
|
59
63
|
triggerUpdate(): void;
|
|
60
64
|
onUpdate(cb: SceneStateCallback): SceneStateCallbackRemover;
|
|
61
65
|
destroy(): void;
|
|
@@ -74,7 +74,7 @@ export interface BoundingBox {
|
|
|
74
74
|
width: number;
|
|
75
75
|
height: number;
|
|
76
76
|
}
|
|
77
|
-
export declare const getCommonBoundingBox: (elements: ExcalidrawElement[] | readonly NonDeleted<ExcalidrawElement>[]) => BoundingBox;
|
|
77
|
+
export declare const getCommonBoundingBox: (elements: readonly ExcalidrawElement[] | readonly NonDeleted<ExcalidrawElement>[]) => BoundingBox;
|
|
78
78
|
/**
|
|
79
79
|
* returns scene coords of user's editor viewport (visible canvas area) bounds
|
|
80
80
|
*/
|
|
@@ -32,13 +32,13 @@ export declare class Delta<T> {
|
|
|
32
32
|
/**
|
|
33
33
|
* Merges two deltas into a new one.
|
|
34
34
|
*/
|
|
35
|
-
static merge<T>(delta1: Delta<T>, delta2: Delta<T>): Delta<T>;
|
|
35
|
+
static merge<T>(delta1: Delta<T>, delta2: Delta<T>, delta3?: Delta<T>): Delta<T>;
|
|
36
36
|
/**
|
|
37
37
|
* Merges deleted and inserted object partials.
|
|
38
38
|
*/
|
|
39
39
|
static mergeObjects<T extends {
|
|
40
40
|
[key: string]: unknown;
|
|
41
|
-
}>(prev: T, added: T, removed
|
|
41
|
+
}>(prev: T, added: T, removed?: T): T;
|
|
42
42
|
/**
|
|
43
43
|
* Merges deleted and inserted array partials.
|
|
44
44
|
*/
|
|
@@ -118,6 +118,7 @@ export interface DeltaContainer<T> {
|
|
|
118
118
|
export declare class AppStateDelta implements DeltaContainer<AppState> {
|
|
119
119
|
delta: Delta<ObservedAppState>;
|
|
120
120
|
private constructor();
|
|
121
|
+
static create(delta: Delta<ObservedAppState>): AppStateDelta;
|
|
121
122
|
static calculate<T extends ObservedAppState>(prevAppState: T, nextAppState: T): AppStateDelta;
|
|
122
123
|
static restore(appStateDeltaDTO: DTO<AppStateDelta>): AppStateDelta;
|
|
123
124
|
static empty(): AppStateDelta;
|
|
@@ -131,7 +132,6 @@ export declare class AppStateDelta implements DeltaContainer<AppState> {
|
|
|
131
132
|
* @returns `true` if a visible change is found, `false` otherwise.
|
|
132
133
|
*/
|
|
133
134
|
private filterInvisibleChanges;
|
|
134
|
-
private static convertToAppStateKey;
|
|
135
135
|
private static filterSelectedElements;
|
|
136
136
|
private static filterSelectedGroups;
|
|
137
137
|
private static stripElementsProps;
|
|
@@ -145,7 +145,7 @@ export declare class AppStateDelta implements DeltaContainer<AppState> {
|
|
|
145
145
|
}
|
|
146
146
|
type ElementPartial<TElement extends ExcalidrawElement = ExcalidrawElement> = Omit<Partial<Ordered<TElement>>, "id" | "updated" | "seed">;
|
|
147
147
|
export type ApplyToOptions = {
|
|
148
|
-
excludedProperties
|
|
148
|
+
excludedProperties?: Set<keyof ElementPartial>;
|
|
149
149
|
};
|
|
150
150
|
/**
|
|
151
151
|
* Elements change is a low level primitive to capture a change between two sets of elements.
|
|
@@ -164,6 +164,7 @@ export declare class ElementsDelta implements DeltaContainer<SceneElementsMap> {
|
|
|
164
164
|
private static satisfiesRemoval;
|
|
165
165
|
private static satisfiesUpdate;
|
|
166
166
|
private static satisfiesCommmonInvariants;
|
|
167
|
+
private static satisfiesUniqueInvariants;
|
|
167
168
|
private static validate;
|
|
168
169
|
/**
|
|
169
170
|
* Calculates the `Delta`s between the previous and next set of elements.
|
|
@@ -213,6 +214,7 @@ export declare class ElementsDelta implements DeltaContainer<SceneElementsMap> {
|
|
|
213
214
|
* should be rebound (if possible) with the current element ~ bindings should be bidirectional.
|
|
214
215
|
*/
|
|
215
216
|
private static rebindAffected;
|
|
217
|
+
static redrawElements(nextElements: SceneElementsMap, changedElements: Map<string, OrderedExcalidrawElement>): SceneElementsMap;
|
|
216
218
|
private static redrawTextBoundingBoxes;
|
|
217
219
|
private static redrawBoundArrows;
|
|
218
220
|
private static reorderElements;
|
|
@@ -38,6 +38,7 @@ export * from "./image";
|
|
|
38
38
|
export * from "./linearElementEditor";
|
|
39
39
|
export * from "./mutateElement";
|
|
40
40
|
export * from "./newElement";
|
|
41
|
+
export * from "./positionElementsOnGrid";
|
|
41
42
|
export * from "./renderElement";
|
|
42
43
|
export * from "./resizeElements";
|
|
43
44
|
export * from "./resizeTest";
|
|
@@ -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
|
/**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { type Radians } from "@excalidraw/math";
|
|
1
2
|
import type { AppState } from "@excalidraw/excalidraw/types";
|
|
2
3
|
import type { ExtractSetType } from "@excalidraw/common/utility-types";
|
|
3
|
-
import type { Radians } from "@excalidraw/math";
|
|
4
4
|
import type { Scene } from "./Scene";
|
|
5
5
|
import type { MaybeTransformHandleType } from "./transformHandles";
|
|
6
6
|
import type { ElementsMap, ExcalidrawElement, ExcalidrawElementType, ExcalidrawTextContainer, ExcalidrawTextElement, ExcalidrawTextElementWithContainer, NonDeletedExcalidrawElement } from "./types";
|
|
@@ -161,6 +161,7 @@ export declare const actionClearCanvas: {
|
|
|
161
161
|
openPopup: "fontFamily" | "canvasBackground" | "elementBackground" | "elementStroke" | null;
|
|
162
162
|
openSidebar: {
|
|
163
163
|
name: string;
|
|
164
|
+
/** zoom content to cover X of the viewport, when fitToViewport=true */
|
|
164
165
|
tab?: string | undefined;
|
|
165
166
|
} | null;
|
|
166
167
|
defaultSidebarDockedPreference: boolean;
|
|
@@ -278,6 +279,7 @@ export declare const actionZoomIn: {
|
|
|
278
279
|
openPopup: "fontFamily" | "canvasBackground" | "elementBackground" | "elementStroke" | null;
|
|
279
280
|
openSidebar: {
|
|
280
281
|
name: string;
|
|
282
|
+
/** zoom content to cover X of the viewport, when fitToViewport=true */
|
|
281
283
|
tab?: string | undefined;
|
|
282
284
|
} | null;
|
|
283
285
|
openDialog: {
|
|
@@ -464,6 +466,7 @@ export declare const actionZoomOut: {
|
|
|
464
466
|
openPopup: "fontFamily" | "canvasBackground" | "elementBackground" | "elementStroke" | null;
|
|
465
467
|
openSidebar: {
|
|
466
468
|
name: string;
|
|
469
|
+
/** zoom content to cover X of the viewport, when fitToViewport=true */
|
|
467
470
|
tab?: string | undefined;
|
|
468
471
|
} | null;
|
|
469
472
|
openDialog: {
|
|
@@ -650,6 +653,7 @@ export declare const actionResetZoom: {
|
|
|
650
653
|
openPopup: "fontFamily" | "canvasBackground" | "elementBackground" | "elementStroke" | null;
|
|
651
654
|
openSidebar: {
|
|
652
655
|
name: string;
|
|
656
|
+
/** zoom content to cover X of the viewport, when fitToViewport=true */
|
|
653
657
|
tab?: string | undefined;
|
|
654
658
|
} | null;
|
|
655
659
|
openDialog: {
|
|
@@ -842,6 +846,7 @@ export declare const zoomToFitBounds: ({ bounds, appState, canvasOffsets, fitToV
|
|
|
842
846
|
openPopup: "fontFamily" | "canvasBackground" | "elementBackground" | "elementStroke" | null;
|
|
843
847
|
openSidebar: {
|
|
844
848
|
name: string;
|
|
849
|
+
/** zoom content to cover X of the viewport, when fitToViewport=true */
|
|
845
850
|
tab?: string | undefined;
|
|
846
851
|
} | null;
|
|
847
852
|
openDialog: {
|
|
@@ -1030,6 +1035,7 @@ export declare const zoomToFit: ({ canvasOffsets, targetElements, appState, fitT
|
|
|
1030
1035
|
openPopup: "fontFamily" | "canvasBackground" | "elementBackground" | "elementStroke" | null;
|
|
1031
1036
|
openSidebar: {
|
|
1032
1037
|
name: string;
|
|
1038
|
+
/** zoom content to cover X of the viewport, when fitToViewport=true */
|
|
1033
1039
|
tab?: string | undefined;
|
|
1034
1040
|
} | null;
|
|
1035
1041
|
openDialog: {
|
|
@@ -1210,6 +1216,7 @@ export declare const actionZoomToFitSelectionInViewport: {
|
|
|
1210
1216
|
openPopup: "fontFamily" | "canvasBackground" | "elementBackground" | "elementStroke" | null;
|
|
1211
1217
|
openSidebar: {
|
|
1212
1218
|
name: string;
|
|
1219
|
+
/** zoom content to cover X of the viewport, when fitToViewport=true */
|
|
1213
1220
|
tab?: string | undefined;
|
|
1214
1221
|
} | null;
|
|
1215
1222
|
openDialog: {
|
|
@@ -1394,6 +1401,7 @@ export declare const actionZoomToFitSelection: {
|
|
|
1394
1401
|
openPopup: "fontFamily" | "canvasBackground" | "elementBackground" | "elementStroke" | null;
|
|
1395
1402
|
openSidebar: {
|
|
1396
1403
|
name: string;
|
|
1404
|
+
/** zoom content to cover X of the viewport, when fitToViewport=true */
|
|
1397
1405
|
tab?: string | undefined;
|
|
1398
1406
|
} | null;
|
|
1399
1407
|
openDialog: {
|
|
@@ -1579,6 +1587,7 @@ export declare const actionZoomToFit: {
|
|
|
1579
1587
|
openPopup: "fontFamily" | "canvasBackground" | "elementBackground" | "elementStroke" | null;
|
|
1580
1588
|
openSidebar: {
|
|
1581
1589
|
name: string;
|
|
1590
|
+
/** zoom content to cover X of the viewport, when fitToViewport=true */
|
|
1582
1591
|
tab?: string | undefined;
|
|
1583
1592
|
} | null;
|
|
1584
1593
|
openDialog: {
|
|
@@ -1766,6 +1775,7 @@ export declare const actionToggleTheme: {
|
|
|
1766
1775
|
openPopup: "fontFamily" | "canvasBackground" | "elementBackground" | "elementStroke" | null;
|
|
1767
1776
|
openSidebar: {
|
|
1768
1777
|
name: string;
|
|
1778
|
+
/** zoom content to cover X of the viewport, when fitToViewport=true */
|
|
1769
1779
|
tab?: string | undefined;
|
|
1770
1780
|
} | null;
|
|
1771
1781
|
openDialog: {
|
|
@@ -1877,7 +1887,7 @@ export declare const actionToggleEraserTool: {
|
|
|
1877
1887
|
trackEvent: {
|
|
1878
1888
|
category: "toolbar";
|
|
1879
1889
|
};
|
|
1880
|
-
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) => {
|
|
1881
1891
|
appState: {
|
|
1882
1892
|
selectedElementIds: {};
|
|
1883
1893
|
selectedGroupIds: {};
|
|
@@ -1948,6 +1958,7 @@ export declare const actionToggleEraserTool: {
|
|
|
1948
1958
|
openPopup: "fontFamily" | "canvasBackground" | "elementBackground" | "elementStroke" | null;
|
|
1949
1959
|
openSidebar: {
|
|
1950
1960
|
name: string;
|
|
1961
|
+
/** zoom content to cover X of the viewport, when fitToViewport=true */
|
|
1951
1962
|
tab?: string | undefined;
|
|
1952
1963
|
} | null;
|
|
1953
1964
|
openDialog: {
|
|
@@ -2054,6 +2065,7 @@ export declare const actionToggleLassoTool: {
|
|
|
2054
2065
|
trackEvent: {
|
|
2055
2066
|
category: "toolbar";
|
|
2056
2067
|
};
|
|
2068
|
+
predicate: (elements: readonly ExcalidrawElement[], appState: AppState, props: import("../types").ExcalidrawProps, app: import("../types").AppClassProperties) => boolean;
|
|
2057
2069
|
perform: (elements: readonly import("@excalidraw/element/types").OrderedExcalidrawElement[], appState: Readonly<AppState>, _: any, app: import("../types").AppClassProperties) => {
|
|
2058
2070
|
appState: {
|
|
2059
2071
|
selectedElementIds: {};
|
|
@@ -2125,6 +2137,7 @@ export declare const actionToggleLassoTool: {
|
|
|
2125
2137
|
openPopup: "fontFamily" | "canvasBackground" | "elementBackground" | "elementStroke" | null;
|
|
2126
2138
|
openSidebar: {
|
|
2127
2139
|
name: string;
|
|
2140
|
+
/** zoom content to cover X of the viewport, when fitToViewport=true */
|
|
2128
2141
|
tab?: string | undefined;
|
|
2129
2142
|
} | null;
|
|
2130
2143
|
openDialog: {
|
|
@@ -2302,6 +2315,7 @@ export declare const actionToggleHandTool: {
|
|
|
2302
2315
|
openPopup: "fontFamily" | "canvasBackground" | "elementBackground" | "elementStroke" | null;
|
|
2303
2316
|
openSidebar: {
|
|
2304
2317
|
name: string;
|
|
2318
|
+
/** zoom content to cover X of the viewport, when fitToViewport=true */
|
|
2305
2319
|
tab?: string | undefined;
|
|
2306
2320
|
} | null;
|
|
2307
2321
|
openDialog: {
|
|
@@ -63,4 +63,5 @@ export declare const readSystemClipboard: () => Promise<{
|
|
|
63
63
|
export declare const parseClipboard: (event: ClipboardEvent, isPlainPaste?: boolean) => Promise<ClipboardData>;
|
|
64
64
|
export declare const copyBlobToClipboardAsPng: (blob: Blob | Promise<Blob>) => Promise<void>;
|
|
65
65
|
export declare const copyTextToSystemClipboard: (text: string | null, clipboardEvent?: ClipboardEvent | null) => Promise<void>;
|
|
66
|
+
export declare const isClipboardEvent: (event: React.SyntheticEvent | Event) => event is ClipboardEvent;
|
|
66
67
|
export {};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { type EXPORT_IMAGE_TYPES, Emitter } from "@excalidraw/common";
|
|
3
|
-
import { LinearElementEditor, FlowChartCreator, Scene, Store, type ElementUpdate } from "@excalidraw/element";
|
|
4
|
-
import type { ExcalidrawElement, NonDeleted, NonDeletedExcalidrawElement, ExcalidrawFrameLikeElement, ExcalidrawIframeElement, ExcalidrawEmbeddableElement, Ordered } from "@excalidraw/element/types";
|
|
3
|
+
import { LinearElementEditor, FlowChartCreator, Scene, Store, type ElementUpdate, StoreDelta, type ApplyToOptions } from "@excalidraw/element";
|
|
4
|
+
import type { ExcalidrawElement, NonDeleted, NonDeletedExcalidrawElement, ExcalidrawFrameLikeElement, ExcalidrawIframeElement, ExcalidrawEmbeddableElement, Ordered, SceneElementsMap } from "@excalidraw/element/types";
|
|
5
5
|
import type { Mutable } from "@excalidraw/common/utility-types";
|
|
6
6
|
import { ActionManager } from "../actions/manager";
|
|
7
7
|
import { AnimationFrameHandler } from "../animation-frame-handler";
|
|
@@ -153,6 +153,7 @@ declare class App extends React.Component<AppProps, AppState> {
|
|
|
153
153
|
x: number;
|
|
154
154
|
y: number;
|
|
155
155
|
};
|
|
156
|
+
blockDragging: boolean;
|
|
156
157
|
};
|
|
157
158
|
eventListeners: {
|
|
158
159
|
onMove: {
|
|
@@ -222,6 +223,7 @@ declare class App extends React.Component<AppProps, AppState> {
|
|
|
222
223
|
x: number;
|
|
223
224
|
y: number;
|
|
224
225
|
};
|
|
226
|
+
blockDragging: boolean;
|
|
225
227
|
};
|
|
226
228
|
eventListeners: {
|
|
227
229
|
onMove: {
|
|
@@ -243,6 +245,7 @@ declare class App extends React.Component<AppProps, AppState> {
|
|
|
243
245
|
}>]>;
|
|
244
246
|
missingPointerEventCleanupEmitter: Emitter<[event: PointerEvent | null]>;
|
|
245
247
|
onRemoveEventListenersEmitter: Emitter<[]>;
|
|
248
|
+
defaultSelectionTool: "selection" | "lasso";
|
|
246
249
|
constructor(props: AppProps);
|
|
247
250
|
updateEditorAtom: <Value, Args extends unknown[], Result>(atom: WritableAtom<Value, Args, Result>, ...args: Args) => Result;
|
|
248
251
|
private onWindowMessage;
|
|
@@ -297,6 +300,7 @@ declare class App extends React.Component<AppProps, AppState> {
|
|
|
297
300
|
*/
|
|
298
301
|
private resetScene;
|
|
299
302
|
private initializeScene;
|
|
303
|
+
private isMobileOrTablet;
|
|
300
304
|
private isMobileBreakpoint;
|
|
301
305
|
private refreshViewportBreakpoints;
|
|
302
306
|
private refreshEditorBreakpoints;
|
|
@@ -316,6 +320,7 @@ declare class App extends React.Component<AppProps, AppState> {
|
|
|
316
320
|
private static resetTapTwice;
|
|
317
321
|
private onTouchStart;
|
|
318
322
|
private onTouchEnd;
|
|
323
|
+
private insertClipboardContent;
|
|
319
324
|
pasteFromClipboard: (event: ClipboardEvent) => Promise<void>;
|
|
320
325
|
addElementsFromPasteOrLibrary: (opts: {
|
|
321
326
|
elements: readonly ExcalidrawElement[];
|
|
@@ -397,6 +402,7 @@ declare class App extends React.Component<AppProps, AppState> {
|
|
|
397
402
|
*/
|
|
398
403
|
captureUpdate?: SceneData["captureUpdate"];
|
|
399
404
|
}) => void;
|
|
405
|
+
applyDeltas: (deltas: StoreDelta[], options?: ApplyToOptions) => [SceneElementsMap, AppState, boolean];
|
|
400
406
|
mutateElement: <TElement extends Mutable<ExcalidrawElement>>(element: TElement, updates: ElementUpdate<TElement>, informMutation?: boolean) => TElement;
|
|
401
407
|
private triggerRender;
|
|
402
408
|
/**
|
|
@@ -488,7 +494,7 @@ declare class App extends React.Component<AppProps, AppState> {
|
|
|
488
494
|
sceneY: number;
|
|
489
495
|
link: string;
|
|
490
496
|
}) => NonDeleted<ExcalidrawEmbeddableElement> | undefined;
|
|
491
|
-
private
|
|
497
|
+
private newImagePlaceholder;
|
|
492
498
|
private handleLinearElementOnPointerDown;
|
|
493
499
|
private getCurrentItemRoundness;
|
|
494
500
|
private createGenericElementOnPointerDown;
|
|
@@ -509,11 +515,7 @@ declare class App extends React.Component<AppProps, AppState> {
|
|
|
509
515
|
* and when you don't want to loose those modifications
|
|
510
516
|
*/
|
|
511
517
|
private getLatestInitializedImageElement;
|
|
512
|
-
|
|
513
|
-
* inserts image into elements array and rerenders
|
|
514
|
-
*/
|
|
515
|
-
private insertImageElement;
|
|
516
|
-
private onImageAction;
|
|
518
|
+
private onImageToolbarButtonClick;
|
|
517
519
|
private getImageNaturalDimensions;
|
|
518
520
|
/** updates image cache, refreshing updated elements and/or setting status
|
|
519
521
|
to error for images that fail during <img> element creation */
|
|
@@ -527,6 +529,7 @@ declare class App extends React.Component<AppProps, AppState> {
|
|
|
527
529
|
private maybeSuggestBindingAtCursor;
|
|
528
530
|
private clearSelection;
|
|
529
531
|
private handleInteractiveCanvasRef;
|
|
532
|
+
private insertImages;
|
|
530
533
|
private handleAppOnDrop;
|
|
531
534
|
loadFileToCanvas: (file: File, fileHandle: FileSystemHandle | null) => Promise<void>;
|
|
532
535
|
private handleCanvasContextMenu;
|