@excalidraw/common 0.18.0-063e025 → 0.18.0-1118751
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 +159 -17
- package/dist/dev/index.js.map +2 -2
- package/dist/prod/index.js +3 -3
- package/dist/types/common/src/colors.d.ts +22 -0
- package/dist/types/common/src/constants.d.ts +54 -0
- package/dist/types/common/src/keys.d.ts +4 -0
- package/dist/types/common/src/points.d.ts +1 -1
- package/dist/types/common/src/random.d.ts +7 -0
- package/dist/types/common/src/utils.d.ts +1 -1
- package/dist/types/element/src/Scene.d.ts +1 -1
- package/dist/types/element/src/arrowEndpointText.d.ts +49 -0
- package/dist/types/element/src/arrows/focus.d.ts +5 -2
- package/dist/types/element/src/binding.d.ts +15 -8
- package/dist/types/element/src/bucketFill.d.ts +110 -0
- package/dist/types/element/src/collision.d.ts +8 -5
- package/dist/types/element/src/comparisons.d.ts +7 -5
- package/dist/types/element/src/convertToShape.d.ts +23 -0
- package/dist/types/element/src/delta.d.ts +23 -1
- package/dist/types/element/src/dragElements.d.ts +27 -0
- package/dist/types/element/src/duplicate.d.ts +60 -0
- package/dist/types/element/src/flowchart.d.ts +10 -6
- package/dist/types/element/src/frame.d.ts +2 -2
- package/dist/types/element/src/groups.d.ts +1 -1
- package/dist/types/element/src/index.d.ts +4 -0
- package/dist/types/element/src/linearElementEditor.d.ts +17 -0
- package/dist/types/element/src/mutateElement.d.ts +1 -1
- package/dist/types/element/src/newElement.d.ts +37 -2
- package/dist/types/element/src/renderElement.d.ts +21 -4
- package/dist/types/element/src/selection.d.ts +1 -1
- package/dist/types/element/src/shape.d.ts +27 -1
- package/dist/types/element/src/sizeHelpers.d.ts +6 -0
- package/dist/types/element/src/sortElements.d.ts +10 -0
- package/dist/types/element/src/stickyNote.d.ts +183 -0
- package/dist/types/element/src/textElement.d.ts +7 -3
- package/dist/types/element/src/transform.d.ts +25 -6
- package/dist/types/element/src/typeChecks.d.ts +3 -2
- package/dist/types/element/src/types.d.ts +35 -6
- package/dist/types/element/src/utils.d.ts +15 -4
- package/dist/types/element/src/zindex.d.ts +1 -1
- package/dist/types/excalidraw/actions/actionAddToLibrary.d.ts +48 -9
- package/dist/types/excalidraw/actions/actionAlign.d.ts +6 -6
- package/dist/types/excalidraw/actions/actionBoundText.d.ts +32 -6
- package/dist/types/excalidraw/actions/actionCanvas.d.ts +177 -580
- package/dist/types/excalidraw/actions/actionClipboard.d.ts +32 -6
- package/dist/types/excalidraw/actions/actionCropEditor.d.ts +16 -3
- package/dist/types/excalidraw/actions/actionDeleteSelected.d.ts +50 -10
- package/dist/types/excalidraw/actions/actionDeselect.d.ts +13 -3
- package/dist/types/excalidraw/actions/actionDistribute.d.ts +2 -2
- package/dist/types/excalidraw/actions/actionElementLink.d.ts +16 -3
- package/dist/types/excalidraw/actions/actionElementLock.d.ts +32 -6
- package/dist/types/excalidraw/actions/actionExport.d.ts +38 -12
- package/dist/types/excalidraw/actions/actionFinalize.d.ts +1 -0
- package/dist/types/excalidraw/actions/actionFrame.d.ts +99 -185
- package/dist/types/excalidraw/actions/actionGroup.d.ts +33 -7
- package/dist/types/excalidraw/actions/actionLinearEditor.d.ts +68 -4
- package/dist/types/excalidraw/actions/actionLink.d.ts +16 -3
- package/dist/types/excalidraw/actions/actionMenu.d.ts +16 -3
- package/dist/types/excalidraw/actions/actionProperties.d.ts +45 -12
- package/dist/types/excalidraw/actions/actionSelectAll.d.ts +16 -3
- package/dist/types/excalidraw/actions/actionStyles.d.ts +17 -4
- package/dist/types/excalidraw/actions/actionTextAutoResize.d.ts +1 -1
- package/dist/types/excalidraw/actions/actionToggleArrowBinding.d.ts +16 -3
- package/dist/types/excalidraw/actions/actionToggleGridMode.d.ts +16 -3
- package/dist/types/excalidraw/actions/actionToggleMidpointSnapping.d.ts +16 -3
- package/dist/types/excalidraw/actions/actionToggleObjectsSnapMode.d.ts +16 -3
- package/dist/types/excalidraw/actions/actionToggleSearchMenu.d.ts +16 -3
- package/dist/types/excalidraw/actions/actionToggleStats.d.ts +16 -3
- package/dist/types/excalidraw/actions/actionToggleViewMode.d.ts +17 -4
- package/dist/types/excalidraw/actions/actionToggleZenMode.d.ts +16 -3
- package/dist/types/excalidraw/actions/colorTargets.d.ts +39 -0
- package/dist/types/excalidraw/actions/index.d.ts +1 -2
- package/dist/types/excalidraw/actions/manager.d.ts +1 -0
- package/dist/types/excalidraw/actions/shortcuts.d.ts +1 -1
- package/dist/types/excalidraw/actions/types.d.ts +5 -1
- package/dist/types/excalidraw/appState.d.ts +30 -9
- package/dist/types/excalidraw/components/Actions.d.ts +16 -10
- package/dist/types/excalidraw/components/App.arrowText.d.ts +104 -0
- package/dist/types/excalidraw/components/App.bucketFill.d.ts +48 -0
- package/dist/types/excalidraw/components/App.cursor.d.ts +38 -0
- package/dist/types/excalidraw/components/App.d.ts +468 -99
- package/dist/types/excalidraw/components/App.drawshape.d.ts +55 -0
- package/dist/types/excalidraw/components/App.duplicate.d.ts +51 -0
- package/dist/types/excalidraw/components/App.flowchart.d.ts +21 -0
- package/dist/types/excalidraw/components/App.pan.d.ts +54 -0
- package/dist/types/excalidraw/components/App.toolDrag.d.ts +63 -0
- package/dist/types/excalidraw/components/App.viewport.d.ts +73 -0
- package/dist/types/excalidraw/components/App.wheel.d.ts +26 -0
- package/dist/types/excalidraw/components/ColorPicker/ColorPicker.d.ts +8 -2
- package/dist/types/excalidraw/components/ColorPicker/CustomColorList.d.ts +3 -1
- package/dist/types/excalidraw/components/ColorPicker/Picker.d.ts +5 -1
- package/dist/types/excalidraw/components/ColorPicker/PickerColorList.d.ts +9 -2
- package/dist/types/excalidraw/components/ColorPicker/ShadeList.d.ts +4 -2
- package/dist/types/excalidraw/components/ColorPicker/TopPicks.d.ts +8 -1
- package/dist/types/excalidraw/components/ColorPicker/colorTopPicksDnD.d.ts +11 -0
- package/dist/types/excalidraw/components/ColorPicker/keyboardNavHandlers.d.ts +2 -1
- package/dist/types/excalidraw/components/FontPicker/FontPicker.d.ts +4 -1
- package/dist/types/excalidraw/components/FontPicker/FontPickerList.d.ts +6 -1
- package/dist/types/excalidraw/components/FontPicker/fontTopPicksDnD.d.ts +12 -0
- package/dist/types/excalidraw/components/IconButton.d.ts +48 -0
- package/dist/types/excalidraw/components/LaserPointerButton.d.ts +2 -4
- package/dist/types/excalidraw/components/LayerUI.d.ts +5 -2
- package/dist/types/excalidraw/components/LockButton.d.ts +3 -4
- package/dist/types/excalidraw/components/MagicButton.d.ts +0 -2
- package/dist/types/excalidraw/components/MobileMenu.d.ts +4 -4
- package/dist/types/excalidraw/components/MobileToolbar.d.ts +9 -0
- package/dist/types/excalidraw/components/PenModeButton.d.ts +2 -5
- package/dist/types/excalidraw/components/Popover.d.ts +1 -3
- package/dist/types/excalidraw/components/{ButtonIcon.d.ts → RadioButton.d.ts} +2 -5
- package/dist/types/excalidraw/components/ToolPopover.d.ts +3 -6
- package/dist/types/excalidraw/components/Toolbar.d.ts +11 -0
- package/dist/types/excalidraw/components/Tools.d.ts +151 -0
- package/dist/types/excalidraw/components/TopPicksDnD/TopPicksContextMenu.d.ts +14 -0
- package/dist/types/excalidraw/components/TopPicksDnD/TopPicksTip.d.ts +11 -0
- package/dist/types/excalidraw/components/TopPicksDnD/topPicksDnD.d.ts +58 -0
- package/dist/types/excalidraw/components/UserList.d.ts +3 -2
- package/dist/types/excalidraw/components/ViewportStatusFrame/ViewportStatusFrame.d.ts +11 -0
- package/dist/types/excalidraw/components/canvases/InteractiveCanvas.d.ts +2 -0
- package/dist/types/excalidraw/components/canvases/NewElementCanvas.d.ts +2 -0
- package/dist/types/excalidraw/components/footer/Footer.d.ts +3 -1
- package/dist/types/excalidraw/components/icons.d.ts +5 -1
- package/dist/types/excalidraw/components/main-menu/DefaultItems.d.ts +2 -1
- package/dist/types/excalidraw/components/positionElementBesideCursor.d.ts +26 -0
- package/dist/types/excalidraw/components/shapeActionPredicates.d.ts +39 -0
- package/dist/types/excalidraw/data/blob.d.ts +44 -18
- package/dist/types/excalidraw/data/json.d.ts +22 -9
- package/dist/types/excalidraw/drawShapeTrail.d.ts +16 -0
- package/dist/types/excalidraw/fonts/Fonts.d.ts +3 -2
- package/dist/types/excalidraw/hooks/useTextEditorFocus.d.ts +5 -5
- package/dist/types/excalidraw/lasso/utils.d.ts +2 -0
- package/dist/types/excalidraw/renderOverrides.d.ts +9 -0
- package/dist/types/excalidraw/renderer/helpers.d.ts +25 -0
- package/dist/types/excalidraw/renderer/interactiveScene.d.ts +1 -1
- package/dist/types/excalidraw/scene/Renderer.d.ts +64 -2
- package/dist/types/excalidraw/scene/index.d.ts +1 -1
- package/dist/types/excalidraw/scene/types.d.ts +6 -1
- package/dist/types/excalidraw/types.d.ts +341 -21
- package/dist/types/excalidraw/viewport.d.ts +31 -66
- package/dist/types/laser-pointer/src/state.d.ts +1 -0
- package/dist/types/math/src/curve.d.ts +19 -12
- package/dist/types/math/src/index.d.ts +1 -0
- package/dist/types/math/src/pca.d.ts +79 -0
- package/dist/types/math/src/polygon.d.ts +25 -1
- package/dist/types/math/src/segment.d.ts +6 -0
- package/dist/types/utils/src/export.d.ts +1 -0
- package/dist/types/utils/src/shape.d.ts +2 -2
- package/package.json +1 -1
- package/dist/types/excalidraw/actions/actionEmbeddable.d.ts +0 -173
- package/dist/types/excalidraw/components/FollowMode/FollowMode.d.ts +0 -10
- package/dist/types/excalidraw/components/HandButton.d.ts +0 -10
- package/dist/types/excalidraw/components/MobileToolBar.d.ts +0 -10
- package/dist/types/excalidraw/components/ToolButton.d.ts +0 -49
- package/dist/types/excalidraw/components/shapes.d.ts +0 -270
- package/dist/types/excalidraw/cursor.d.ts +0 -5
- package/dist/types/excalidraw/scene/zoom.d.ts +0 -12
package/dist/prod/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var Ve=Object.create;var q=Object.defineProperty;var Ye=Object.getOwnPropertyDescriptor;var $e=Object.getOwnPropertyNames;var ze=Object.getPrototypeOf,Xe=Object.prototype.hasOwnProperty;var je=(e,t)=>()=>(e&&(t=e(e=0)),t);var Z=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var qe=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of $e(t))!Xe.call(e,o)&&o!==n&&q(e,o,{get:()=>t[o],enumerable:!(r=Ye(t,o))||r.enumerable});return e};var Q=(e,t,n)=>(n=e!=null?Ve(ze(e)):{},qe(t||!e||!e.__esModule?q(n,"default",{value:e,enumerable:!0}):n,e));var h,p=je(()=>{h={PROD:!0}});var Oe=Z((V,Le)=>{p();(function(e,t){typeof define=="function"&&define.amd?define([],t):typeof V=="object"?Le.exports=t():(e.PromisePool=t(),e.promisePool=e.PromisePool)})(V,function(){"use strict";var e=function(){this._listeners={}};e.prototype.addEventListener=function(a,l){this._listeners[a]=this._listeners[a]||[],this._listeners[a].indexOf(l)<0&&this._listeners[a].push(l)},e.prototype.removeEventListener=function(a,l){if(this._listeners[a]){var u=this._listeners[a].indexOf(l);u>=0&&this._listeners[a].splice(u,1)}},e.prototype.dispatchEvent=function(a){if(this._listeners[a.type]&&this._listeners[a.type].length)for(var l=this._listeners[a.type].slice(),u=0,m=l.length;u<m;++u)l[u].call(this,a)};var t=function(a){return typeof a.constructor=="function"&&a.constructor.name==="GeneratorFunction"},n=function(a){return{next:function(){var l=a();return l?{value:l}:{done:!0}}}},r=function(a){var l=!1;return{next:function(){return l?{done:!0}:(l=!0,{value:a})}}},o=function(a,l){var u=typeof a;if(u==="object"){if(typeof a.next=="function")return a;if(typeof a.then=="function")return r(a)}return u==="function"?t(a)?a():n(a):r(l.resolve(a))},s=function(a,l,u){this.target=a,this.type=l,this.data=u},i=function(a,l,u){if(e.call(this),typeof l!="number"||Math.floor(l)!==l||l<1)throw new Error("Invalid concurrency");this._concurrency=l,this._options=u||{},this._options.promise=this._options.promise||Promise,this._iterator=o(a,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(a){return typeof a<"u"&&(this._concurrency=a,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 a=this,l=this._options.promise;return this._promise=new l(function(u,m){a._callbacks={reject:m,resolve:u},a._proceed()}),this._promise},i.prototype._fireEvent=function(a,l){this.dispatchEvent(new s(this,a,l))},i.prototype._settle=function(a){a?this._callbacks.reject(a):this._callbacks.resolve(),this._promise=null,this._callbacks=null},i.prototype._onPooledPromiseFulfilled=function(a,l){this._size--,this.active()&&(this._fireEvent("fulfilled",{promise:a,result:l}),this._proceed())},i.prototype._onPooledPromiseRejected=function(a,l){this._size--,this.active()&&(this._fireEvent("rejected",{promise:a,error:l}),this._settle(l||new Error("Unknown error")))},i.prototype._trackPromise=function(a){var l=this;a.then(function(u){l._onPooledPromiseFulfilled(a,u)},function(u){l._onPooledPromiseRejected(a,u)}).catch(function(u){l._settle(new Error("Promise processing failed: "+u))})},i.prototype._proceed=function(){if(!this._done){for(var a={done:!1};this._size<this._concurrency&&!(a=this._iterator.next()).done;)this._size++,this._trackPromise(a.value);this._done=a===null||!!a.done}this._done&&this._size===0&&this._settle()},i.PromisePoolEvent=s,i.PromisePool=i,i})});var He=Z(H=>{"use strict";p();Object.defineProperty(H,"__esModule",{value:!0});H.sanitizeUrl=void 0;var rn=/^([^\w]*)(javascript|data|vbscript)/im,on=/&#(\w+)(^\w|;)?/g,sn=/&(newline|tab);/gi,an=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim,ln=/^.+(:|:)/gim,cn=[".","/"];function un(e){return cn.indexOf(e[0])>-1}function pn(e){return e.replace(on,function(t,n){return String.fromCharCode(n)})}function dn(e){var t=pn(e||"").replace(sn,"").replace(an,"").trim();if(!t)return"about:blank";if(un(t))return t;var n=t.match(ln);if(!n)return t;var r=n[0];return rn.test(r)?"about:blank":t}H.sanitizeUrl=dn});p();p();var J=class{constructor(t){this.scoreFunction=t}content=[];sinkDown(t){let n=this.content[t],r=this.scoreFunction(n);for(;t>0;){let o=(t+1>>1)-1,s=this.content[o];if(r<this.scoreFunction(s))this.content[t]=s,t=o;else break}this.content[t]=n}bubbleUp(t){let n=this.content.length,r=this.content[t],o=this.scoreFunction(r);for(;;){let s=(t+1<<1)-1,i=s+1,a=t,l=o;if(s<n){let u=this.scoreFunction(this.content[s]);u<l&&(a=s,l=u)}if(i<n&&this.scoreFunction(this.content[i])<l&&(a=i),a===t)break;this.content[t]=this.content[a],t=a}this.content[t]=r}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))}};p();var gn=e=>Array.isArray(e)&&e.length===4&&typeof e[0]=="number"&&typeof e[1]=="number"&&typeof e[2]=="number"&&typeof e[3]=="number";p();p();function I(e){"@babel/helpers - typeof";return I=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},I(e)}var Qe=/^\s+/,Je=/\s+$/;function c(e,t){if(e=e||"",t=t||{},e instanceof c)return e;if(!(this instanceof c))return new c(e,t);var n=et(e);this._originalInput=e,this._r=n.r,this._g=n.g,this._b=n.b,this._a=n.a,this._roundA=Math.round(100*this._a)/100,this._format=t.format||n.format,this._gradientType=t.gradientType,this._r<1&&(this._r=Math.round(this._r)),this._g<1&&(this._g=Math.round(this._g)),this._b<1&&(this._b=Math.round(this._b)),this._ok=n.ok}c.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var t=this.toRgb();return(t.r*299+t.g*587+t.b*114)/1e3},getLuminance:function(){var t=this.toRgb(),n,r,o,s,i,a;return n=t.r/255,r=t.g/255,o=t.b/255,n<=.03928?s=n/12.92:s=Math.pow((n+.055)/1.055,2.4),r<=.03928?i=r/12.92:i=Math.pow((r+.055)/1.055,2.4),o<=.03928?a=o/12.92:a=Math.pow((o+.055)/1.055,2.4),.2126*s+.7152*i+.0722*a},setAlpha:function(t){return this._a=ae(t),this._roundA=Math.round(100*this._a)/100,this},toHsv:function(){var t=te(this._r,this._g,this._b);return{h:t.h*360,s:t.s,v:t.v,a:this._a}},toHsvString:function(){var t=te(this._r,this._g,this._b),n=Math.round(t.h*360),r=Math.round(t.s*100),o=Math.round(t.v*100);return this._a==1?"hsv("+n+", "+r+"%, "+o+"%)":"hsva("+n+", "+r+"%, "+o+"%, "+this._roundA+")"},toHsl:function(){var t=ee(this._r,this._g,this._b);return{h:t.h*360,s:t.s,l:t.l,a:this._a}},toHslString:function(){var t=ee(this._r,this._g,this._b),n=Math.round(t.h*360),r=Math.round(t.s*100),o=Math.round(t.l*100);return this._a==1?"hsl("+n+", "+r+"%, "+o+"%)":"hsla("+n+", "+r+"%, "+o+"%, "+this._roundA+")"},toHex:function(t){return ne(this._r,this._g,this._b,t)},toHexString:function(t){return"#"+this.toHex(t)},toHex8:function(t){return ot(this._r,this._g,this._b,this._a,t)},toHex8String:function(t){return"#"+this.toHex8(t)},toRgb:function(){return{r:Math.round(this._r),g:Math.round(this._g),b:Math.round(this._b),a:this._a}},toRgbString:function(){return this._a==1?"rgb("+Math.round(this._r)+", "+Math.round(this._g)+", "+Math.round(this._b)+")":"rgba("+Math.round(this._r)+", "+Math.round(this._g)+", "+Math.round(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:Math.round(E(this._r,255)*100)+"%",g:Math.round(E(this._g,255)*100)+"%",b:Math.round(E(this._b,255)*100)+"%",a:this._a}},toPercentageRgbString:function(){return this._a==1?"rgb("+Math.round(E(this._r,255)*100)+"%, "+Math.round(E(this._g,255)*100)+"%, "+Math.round(E(this._b,255)*100)+"%)":"rgba("+Math.round(E(this._r,255)*100)+"%, "+Math.round(E(this._g,255)*100)+"%, "+Math.round(E(this._b,255)*100)+"%, "+this._roundA+")"},toName:function(){return this._a===0?"transparent":this._a<1?!1:Et[ne(this._r,this._g,this._b,!0)]||!1},toFilter:function(t){var n="#"+re(this._r,this._g,this._b,this._a),r=n,o=this._gradientType?"GradientType = 1, ":"";if(t){var s=c(t);r="#"+re(s._r,s._g,s._b,s._a)}return"progid:DXImageTransform.Microsoft.gradient("+o+"startColorstr="+n+",endColorstr="+r+")"},toString:function(t){var n=!!t;t=t||this._format;var r=!1,o=this._a<1&&this._a>=0,s=!n&&o&&(t==="hex"||t==="hex6"||t==="hex3"||t==="hex4"||t==="hex8"||t==="name");return s?t==="name"&&this._a===0?this.toName():this.toRgbString():(t==="rgb"&&(r=this.toRgbString()),t==="prgb"&&(r=this.toPercentageRgbString()),(t==="hex"||t==="hex6")&&(r=this.toHexString()),t==="hex3"&&(r=this.toHexString(!0)),t==="hex4"&&(r=this.toHex8String(!0)),t==="hex8"&&(r=this.toHex8String()),t==="name"&&(r=this.toName()),t==="hsl"&&(r=this.toHslString()),t==="hsv"&&(r=this.toHsvString()),r||this.toHexString())},clone:function(){return c(this.toString())},_applyModification:function(t,n){var r=t.apply(null,[this].concat([].slice.call(n)));return this._r=r._r,this._g=r._g,this._b=r._b,this.setAlpha(r._a),this},lighten:function(){return this._applyModification(lt,arguments)},brighten:function(){return this._applyModification(ct,arguments)},darken:function(){return this._applyModification(ut,arguments)},desaturate:function(){return this._applyModification(st,arguments)},saturate:function(){return this._applyModification(at,arguments)},greyscale:function(){return this._applyModification(it,arguments)},spin:function(){return this._applyModification(pt,arguments)},_applyCombination:function(t,n){return t.apply(null,[this].concat([].slice.call(n)))},analogous:function(){return this._applyCombination(ht,arguments)},complement:function(){return this._applyCombination(dt,arguments)},monochromatic:function(){return this._applyCombination(mt,arguments)},splitcomplement:function(){return this._applyCombination(ft,arguments)},triad:function(){return this._applyCombination(oe,[3])},tetrad:function(){return this._applyCombination(oe,[4])}};c.fromRatio=function(e,t){if(I(e)=="object"){var n={};for(var r in e)e.hasOwnProperty(r)&&(r==="a"?n[r]=e[r]:n[r]=R(e[r]));e=n}return c(e,t)};function et(e){var t={r:0,g:0,b:0},n=1,r=null,o=null,s=null,i=!1,a=!1;return typeof e=="string"&&(e=_t(e)),I(e)=="object"&&(A(e.r)&&A(e.g)&&A(e.b)?(t=tt(e.r,e.g,e.b),i=!0,a=String(e.r).substr(-1)==="%"?"prgb":"rgb"):A(e.h)&&A(e.s)&&A(e.v)?(r=R(e.s),o=R(e.v),t=rt(e.h,r,o),i=!0,a="hsv"):A(e.h)&&A(e.s)&&A(e.l)&&(r=R(e.s),s=R(e.l),t=nt(e.h,r,s),i=!0,a="hsl"),e.hasOwnProperty("a")&&(n=e.a)),n=ae(n),{ok:i,format:e.format||a,r:Math.min(255,Math.max(t.r,0)),g:Math.min(255,Math.max(t.g,0)),b:Math.min(255,Math.max(t.b,0)),a:n}}function tt(e,t,n){return{r:E(e,255)*255,g:E(t,255)*255,b:E(n,255)*255}}function ee(e,t,n){e=E(e,255),t=E(t,255),n=E(n,255);var r=Math.max(e,t,n),o=Math.min(e,t,n),s,i,a=(r+o)/2;if(r==o)s=i=0;else{var l=r-o;switch(i=a>.5?l/(2-r-o):l/(r+o),r){case e:s=(t-n)/l+(t<n?6:0);break;case t:s=(n-e)/l+2;break;case n:s=(e-t)/l+4;break}s/=6}return{h:s,s:i,l:a}}function nt(e,t,n){var r,o,s;e=E(e,360),t=E(t,100),n=E(n,100);function i(u,m,b){return b<0&&(b+=1),b>1&&(b-=1),b<1/6?u+(m-u)*6*b:b<1/2?m:b<2/3?u+(m-u)*(2/3-b)*6:u}if(t===0)r=o=s=n;else{var a=n<.5?n*(1+t):n+t-n*t,l=2*n-a;r=i(l,a,e+1/3),o=i(l,a,e),s=i(l,a,e-1/3)}return{r:r*255,g:o*255,b:s*255}}function te(e,t,n){e=E(e,255),t=E(t,255),n=E(n,255);var r=Math.max(e,t,n),o=Math.min(e,t,n),s,i,a=r,l=r-o;if(i=r===0?0:l/r,r==o)s=0;else{switch(r){case e:s=(t-n)/l+(t<n?6:0);break;case t:s=(n-e)/l+2;break;case n:s=(e-t)/l+4;break}s/=6}return{h:s,s:i,v:a}}function rt(e,t,n){e=E(e,360)*6,t=E(t,100),n=E(n,100);var r=Math.floor(e),o=e-r,s=n*(1-t),i=n*(1-o*t),a=n*(1-(1-o)*t),l=r%6,u=[n,i,s,s,a,n][l],m=[a,n,n,i,s,s][l],b=[s,s,a,n,n,i][l];return{r:u*255,g:m*255,b:b*255}}function ne(e,t,n,r){var o=[x(Math.round(e).toString(16)),x(Math.round(t).toString(16)),x(Math.round(n).toString(16))];return r&&o[0].charAt(0)==o[0].charAt(1)&&o[1].charAt(0)==o[1].charAt(1)&&o[2].charAt(0)==o[2].charAt(1)?o[0].charAt(0)+o[1].charAt(0)+o[2].charAt(0):o.join("")}function ot(e,t,n,r,o){var s=[x(Math.round(e).toString(16)),x(Math.round(t).toString(16)),x(Math.round(n).toString(16)),x(ie(r))];return o&&s[0].charAt(0)==s[0].charAt(1)&&s[1].charAt(0)==s[1].charAt(1)&&s[2].charAt(0)==s[2].charAt(1)&&s[3].charAt(0)==s[3].charAt(1)?s[0].charAt(0)+s[1].charAt(0)+s[2].charAt(0)+s[3].charAt(0):s.join("")}function re(e,t,n,r){var o=[x(ie(r)),x(Math.round(e).toString(16)),x(Math.round(t).toString(16)),x(Math.round(n).toString(16))];return o.join("")}c.equals=function(e,t){return!e||!t?!1:c(e).toRgbString()==c(t).toRgbString()};c.random=function(){return c.fromRatio({r:Math.random(),g:Math.random(),b:Math.random()})};function st(e,t){t=t===0?0:t||10;var n=c(e).toHsl();return n.s-=t/100,n.s=C(n.s),c(n)}function at(e,t){t=t===0?0:t||10;var n=c(e).toHsl();return n.s+=t/100,n.s=C(n.s),c(n)}function it(e){return c(e).desaturate(100)}function lt(e,t){t=t===0?0:t||10;var n=c(e).toHsl();return n.l+=t/100,n.l=C(n.l),c(n)}function ct(e,t){t=t===0?0:t||10;var n=c(e).toRgb();return n.r=Math.max(0,Math.min(255,n.r-Math.round(255*-(t/100)))),n.g=Math.max(0,Math.min(255,n.g-Math.round(255*-(t/100)))),n.b=Math.max(0,Math.min(255,n.b-Math.round(255*-(t/100)))),c(n)}function ut(e,t){t=t===0?0:t||10;var n=c(e).toHsl();return n.l-=t/100,n.l=C(n.l),c(n)}function pt(e,t){var n=c(e).toHsl(),r=(n.h+t)%360;return n.h=r<0?360+r:r,c(n)}function dt(e){var t=c(e).toHsl();return t.h=(t.h+180)%360,c(t)}function oe(e,t){if(isNaN(t)||t<=0)throw new Error("Argument to polyad must be a positive number");for(var n=c(e).toHsl(),r=[c(e)],o=360/t,s=1;s<t;s++)r.push(c({h:(n.h+s*o)%360,s:n.s,l:n.l}));return r}function ft(e){var t=c(e).toHsl(),n=t.h;return[c(e),c({h:(n+72)%360,s:t.s,l:t.l}),c({h:(n+216)%360,s:t.s,l:t.l})]}function ht(e,t,n){t=t||6,n=n||30;var r=c(e).toHsl(),o=360/n,s=[c(e)];for(r.h=(r.h-(o*t>>1)+720)%360;--t;)r.h=(r.h+o)%360,s.push(c(r));return s}function mt(e,t){t=t||6;for(var n=c(e).toHsv(),r=n.h,o=n.s,s=n.v,i=[],a=1/t;t--;)i.push(c({h:r,s:o,v:s})),s=(s+a)%1;return i}c.mix=function(e,t,n){n=n===0?0:n||50;var r=c(e).toRgb(),o=c(t).toRgb(),s=n/100,i={r:(o.r-r.r)*s+r.r,g:(o.g-r.g)*s+r.g,b:(o.b-r.b)*s+r.b,a:(o.a-r.a)*s+r.a};return c(i)};c.readability=function(e,t){var n=c(e),r=c(t);return(Math.max(n.getLuminance(),r.getLuminance())+.05)/(Math.min(n.getLuminance(),r.getLuminance())+.05)};c.isReadable=function(e,t,n){var r=c.readability(e,t),o,s;switch(s=!1,o=xt(n),o.level+o.size){case"AAsmall":case"AAAlarge":s=r>=4.5;break;case"AAlarge":s=r>=3;break;case"AAAsmall":s=r>=7;break}return s};c.mostReadable=function(e,t,n){var r=null,o=0,s,i,a,l;n=n||{},i=n.includeFallbackColors,a=n.level,l=n.size;for(var u=0;u<t.length;u++)s=c.readability(e,t[u]),s>o&&(o=s,r=c(t[u]));return c.isReadable(e,r,{level:a,size:l})||!i?r:(n.includeFallbackColors=!1,c.mostReadable(e,["#fff","#000"],n))};var B=c.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},Et=c.hexNames=Tt(B);function Tt(e){var t={};for(var n in e)e.hasOwnProperty(n)&&(t[e[n]]=n);return t}function ae(e){return e=parseFloat(e),(isNaN(e)||e<0||e>1)&&(e=1),e}function E(e,t){bt(e)&&(e="100%");var n=gt(e);return e=Math.min(t,Math.max(0,parseFloat(e))),n&&(e=parseInt(e*t,10)/100),Math.abs(e-t)<1e-6?1:e%t/parseFloat(t)}function C(e){return Math.min(1,Math.max(0,e))}function g(e){return parseInt(e,16)}function bt(e){return typeof e=="string"&&e.indexOf(".")!=-1&&parseFloat(e)===1}function gt(e){return typeof e=="string"&&e.indexOf("%")!=-1}function x(e){return e.length==1?"0"+e:""+e}function R(e){return e<=1&&(e=e*100+"%"),e}function ie(e){return Math.round(parseFloat(e)*255).toString(16)}function se(e){return g(e)/255}var _=function(){var e="[-\\+]?\\d+%?",t="[-\\+]?\\d*\\.\\d+%?",n="(?:"+t+")|(?:"+e+")",r="[\\s|\\(]+("+n+")[,|\\s]+("+n+")[,|\\s]+("+n+")\\s*\\)?",o="[\\s|\\(]+("+n+")[,|\\s]+("+n+")[,|\\s]+("+n+")[,|\\s]+("+n+")\\s*\\)?";return{CSS_UNIT:new RegExp(n),rgb:new RegExp("rgb"+r),rgba:new RegExp("rgba"+o),hsl:new RegExp("hsl"+r),hsla:new RegExp("hsla"+o),hsv:new RegExp("hsv"+r),hsva:new RegExp("hsva"+o),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/}}();function A(e){return!!_.CSS_UNIT.exec(e)}function _t(e){e=e.replace(Qe,"").replace(Je,"").toLowerCase();var t=!1;if(B[e])e=B[e],t=!0;else if(e=="transparent")return{r:0,g:0,b:0,a:0,format:"name"};var n;return(n=_.rgb.exec(e))?{r:n[1],g:n[2],b:n[3]}:(n=_.rgba.exec(e))?{r:n[1],g:n[2],b:n[3],a:n[4]}:(n=_.hsl.exec(e))?{h:n[1],s:n[2],l:n[3]}:(n=_.hsla.exec(e))?{h:n[1],s:n[2],l:n[3],a:n[4]}:(n=_.hsv.exec(e))?{h:n[1],s:n[2],v:n[3]}:(n=_.hsva.exec(e))?{h:n[1],s:n[2],v:n[3],a:n[4]}:(n=_.hex8.exec(e))?{r:g(n[1]),g:g(n[2]),b:g(n[3]),a:se(n[4]),format:t?"name":"hex8"}:(n=_.hex6.exec(e))?{r:g(n[1]),g:g(n[2]),b:g(n[3]),format:t?"name":"hex"}:(n=_.hex4.exec(e))?{r:g(n[1]+""+n[1]),g:g(n[2]+""+n[2]),b:g(n[3]+""+n[3]),a:se(n[4]+""+n[4]),format:t?"name":"hex8"}:(n=_.hex3.exec(e))?{r:g(n[1]+""+n[1]),g:g(n[2]+""+n[2]),b:g(n[3]+""+n[3]),format:t?"name":"hex"}:!1}function xt(e){var t,n;return e=e||{level:"AA",size:"small"},t=(e.level||"AA").toUpperCase(),n=(e.size||"small").toLowerCase(),t!=="AA"&&t!=="AAA"&&(t="AA"),n!=="small"&&n!=="large"&&(n="small"),{level:t,size:n}}import{clamp as le}from"@excalidraw/math";import{degreesToRadians as At}from"@excalidraw/math";var K=typeof window<"u"?new Map:null;function yt(e,t,n,r){let o=e/255,s=t/255,i=n/255,a=At(r),l=Math.cos(a),u=Math.sin(a),m=[.213+l*.787-u*.213,.715-l*.715-u*.715,.072-l*.072+u*.928,.213-l*.213+u*.143,.715+l*.285+u*.14,.072-l*.072-u*.283,.213-l*.213-u*.787,.715-l*.715+u*.715,.072+l*.928+u*.072],b=o*m[0]+s*m[1]+i*m[2],j=o*m[3]+s*m[4]+i*m[5],y=o*m[6]+s*m[7]+i*m[8];return{r:Math.round(Math.max(0,Math.min(1,b))*255),g:Math.round(Math.max(0,Math.min(1,j))*255),b:Math.round(Math.max(0,Math.min(1,y))*255)}}var vt=(e,t,n,r)=>{let o=le(r,0,100)/100,s=u=>{let m=u*(1-o)+(255-u)*o;return Math.round(le(m,0,255))},i=s(e),a=s(t),l=s(n);return{r:i,g:a,b:l}},Rn=(e,t=!0)=>{if(!t)return e;let n=K?.get(e);if(n)return n;let r=c(e),o=r.getAlpha(),s=r.toRgb(),i=vt(s.r,s.g,s.b,93),a=yt(i.r,i.g,i.b,180),l=ue(a.r,a.g,a.b,o);return K&&K.set(e,l),l},St=(e,t)=>t.reduce((n,r)=>(r in e&&(n[r]=e[r]),n),{}),Ln=5,On=5,wn=4,P=4,D=1,d={transparent:"transparent",black:"#1e1e1e",white:"#ffffff",gray:["#f8f9fa","#e9ecef","#ced4da","#868e96","#343a40"],red:["#fff5f5","#ffc9c9","#ff8787","#fa5252","#e03131"],pink:["#fff0f6","#fcc2d7","#f783ac","#e64980","#c2255c"],grape:["#f8f0fc","#eebefa","#da77f2","#be4bdb","#9c36b5"],violet:["#f3f0ff","#d0bfff","#9775fa","#7950f2","#6741d9"],blue:["#e7f5ff","#a5d8ff","#4dabf7","#228be6","#1971c2"],cyan:["#e3fafc","#99e9f2","#3bc9db","#15aabf","#0c8599"],teal:["#e6fcf5","#96f2d7","#38d9a9","#12b886","#099268"],green:["#ebfbee","#b2f2bb","#69db7c","#40c057","#2f9e44"],yellow:["#fff9db","#ffec99","#ffd43b","#fab005","#f08c00"],orange:["#fff4e6","#ffd8a8","#ffa94d","#fd7e14","#e8590c"],bronze:["#f8f1ee","#eaddd7","#d2bab0","#a18072","#846358"]},ce=St(d,["cyan","blue","violet","grape","pink","green","teal","yellow","orange","red"]),Fn=[d.black,d.red[P],d.green[P],d.blue[P],d.yellow[P]],In=[d.transparent,d.red[D],d.green[D],d.blue[D],d.yellow[D]],Cn=[d.white,"#f8f9fa","#f5faff","#fffce8","#fdf8f6"],Pn={transparent:d.transparent,white:d.white,gray:d.gray,black:d.black,bronze:d.bronze,...ce},Dn={transparent:d.transparent,white:d.white,gray:d.gray,black:d.black,bronze:d.bronze,...ce},kn=e=>[d.cyan[e],d.blue[e],d.violet[e],d.grape[e],d.pink[e],d.green[e],d.teal[e],d.yellow[e],d.orange[e],d.red[e]],ue=(e,t,n,r)=>{let o=`#${(16777216+(e<<16)+(t<<8)+n).toString(16).slice(1)}`;if(r!==void 0&&r<1){let s=Math.round(r*255).toString(16).padStart(2,"0");return`${o}${s}`}return o},Un=e=>{let t=c(e);if(!t.isValid())return null;let{r:n,g:r,b:o,a:s}=t.toRgb();return ue(n,r,o,s)},pe=e=>c(e).getAlpha()===0,Nn=240,Mt=(e,t,n)=>(e*299+t*587+n*114)/1e3,Hn=(e,t=160)=>{if(!e)return!0;if(pe(e))return!1;let n=c(e);if(!n.isValid())return!0;let{r,g:o,b:s}=n.toRgb();return Mt(r,o,s)<t},Gn=e=>{if(e=e.trim(),pe(e))return e;let t=c(e);return t.isValid()?["hex","hex8"].includes(t.getFormat())&&!e.startsWith("#")?`#${e}`:e:null};p();var Vn=typeof window<"u"&&"ResizeObserver"in window,Yn="Excalidraw",$n=36,zn=10,Xn=20,jn=8,qn=5,Zn=1,Qn=30,Jn=Math.PI/12,er="red",tr={TEXT:"text",CROSSHAIR:"crosshair",GRABBING:"grabbing",GRAB:"grab",POINTER:"pointer",MOVE:"move",AUTO:""},nr={MAIN:0,WHEEL:1,SECONDARY:2,TOUCH:-1,ERASER:5},rr={enabled:"all",disabled:"none",inheritFromUI:"var(--ui-pointerEvents)"},Rt=(f=>(f.COPY="copy",f.PASTE="paste",f.CUT="cut",f.KEYDOWN="keydown",f.KEYUP="keyup",f.MOUSE_MOVE="mousemove",f.RESIZE="resize",f.UNLOAD="unload",f.FOCUS="focus",f.BLUR="blur",f.DRAG_OVER="dragover",f.DROP="drop",f.GESTURE_END="gestureend",f.BEFORE_UNLOAD="beforeunload",f.GESTURE_START="gesturestart",f.GESTURE_CHANGE="gesturechange",f.POINTER_MOVE="pointermove",f.POINTER_DOWN="pointerdown",f.POINTER_UP="pointerup",f.STATE_CHANGE="statechange",f.WHEEL="wheel",f.TOUCH_START="touchstart",f.TOUCH_END="touchend",f.HASHCHANGE="hashchange",f.VISIBILITY_CHANGE="visibilitychange",f.SCROLL="scroll",f.EXCALIDRAW_LINK="excalidraw-link",f.MENU_ITEM_SELECT="menu.itemSelect",f.MESSAGE="message",f.FULLSCREENCHANGE="fullscreenchange",f))(Rt||{}),or={UNSTARTED:-1,ENDED:0,PLAYING:1,PAUSED:2,BUFFERING:3,CUED:5},k={TEST:"test",DEVELOPMENT:"development",PRODUCTION:"production"},sr={SIDEBAR:"sidebar",SHAPE_ACTIONS_MENU:"App-menu__left",ZOOM_ACTIONS:"zoom-actions",SEARCH_MENU_INPUT_WRAPPER:"layer-ui__search-inputWrapper",CONVERT_ELEMENT_TYPE_POPUP:"ConvertElementTypePopup",SHAPE_ACTIONS_THEME_SCOPE:"shape-actions-theme-scope",FRAME_NAME:"frame-name",DROPDOWN_MENU_EVENT_WRAPPER:"dropdown-menu-event-wrapper"},ar={sm:16,md:20,lg:28,xl:36},fe="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},he="sans-serif",me="monospace",Lt={[he]:998,[me]:999},W={[fe]:100,...Lt,[L]:1e3};function Ot(e){switch(e){case T.Cascadia:case T["Comic Shanns"]:return me;default:return he}}var Ee=e=>{let t=Ot(e);switch(e){case T.Excalifont:return[fe,t,L];default:return[t,L]}},ir={LIGHT:"light",DARK:"dark"},lr="invert(93%) hue-rotate(180deg)",cr={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},ur=1,pr=20,dr=T.Excalifont,fr="left",hr="top",Te="{version}",wt=2,Ft=2*wt,It=1e-5,mr=2*Ft-It,Er="#ffffff",Tr="#1e1e1e",br="#a2f1a6",gr=["selectAll"],_r=20,xr=5,be={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"},Ct={text:"text/plain",html:"text/html",json:"application/json",excalidraw:"application/vnd.excalidraw+json",excalidrawClipboard:"application/vnd.excalidraw.clipboard+json",excalidrawlib:"application/vnd.excalidrawlib+json",excalidrawlibIds:"application/vnd.excalidrawlib.ids+json"},de={...Ct,"excalidraw.svg":"image/svg+xml","excalidraw.png":"image/png",binary:"application/octet-stream",...be},Ar=[de.text,de.html,...Object.values(be)],yr={png:"png",svg:"svg",clipboard:"clipboard"},vr={excalidraw:"excalidraw",excalidrawClipboard:"excalidraw/clipboard",excalidrawLibrary:"excalidrawlib",excalidrawClipboardWithAPI:"excalidraw-api/clipboard"},Sr=()=>window.EXCALIDRAW_EXPORT_SOURCE||window.location.origin,Mr=500,Rr=300,Lr=500,Or=1e4,wr=3e4,Fr=100,Ir=.1,Cr=.1,Pr=30,Dr=300,kr=6e4,Ur=3e3,Nr={addLibrary:"addLibrary"},Hr={addLibrary:"addLibrary"},Gr={canvasActions:{changeViewBackgroundColor:!0,clearCanvas:!0,export:{saveFileToDisk:!0},loadScene:!0,saveToActiveFile:!0,toggleTheme:null,saveAsImage:!0},tools:{image:!0}},Br=2,Kr=[1,2,3],Wr=10,Vr={maxWidthOrHeight:1440,maxFileSizeBytes:4*1024*1024},Yr="http://www.w3.org/2000/svg",$r=`<?xml version="1.0" standalone="no"?>
|
|
1
|
+
var qe=Object.create;var J=Object.defineProperty;var Ze=Object.getOwnPropertyDescriptor;var Qe=Object.getOwnPropertyNames;var Je=Object.getPrototypeOf,et=Object.prototype.hasOwnProperty;var tt=(e,t)=>()=>(e&&(t=e(e=0)),t);var ee=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var nt=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Qe(t))!et.call(e,o)&&o!==n&&J(e,o,{get:()=>t[o],enumerable:!(r=Ze(t,o))||r.enumerable});return e};var te=(e,t,n)=>(n=e!=null?qe(Je(e)):{},nt(t||!e||!e.__esModule?J(n,"default",{value:e,enumerable:!0}):n,e));var h,p=tt(()=>{h={PROD:!0}});var De=ee(($,Pe)=>{p();(function(e,t){typeof define=="function"&&define.amd?define([],t):typeof $=="object"?Pe.exports=t():(e.PromisePool=t(),e.promisePool=e.PromisePool)})($,function(){"use strict";var e=function(){this._listeners={}};e.prototype.addEventListener=function(a,l){this._listeners[a]=this._listeners[a]||[],this._listeners[a].indexOf(l)<0&&this._listeners[a].push(l)},e.prototype.removeEventListener=function(a,l){if(this._listeners[a]){var u=this._listeners[a].indexOf(l);u>=0&&this._listeners[a].splice(u,1)}},e.prototype.dispatchEvent=function(a){if(this._listeners[a.type]&&this._listeners[a.type].length)for(var l=this._listeners[a.type].slice(),u=0,m=l.length;u<m;++u)l[u].call(this,a)};var t=function(a){return typeof a.constructor=="function"&&a.constructor.name==="GeneratorFunction"},n=function(a){return{next:function(){var l=a();return l?{value:l}:{done:!0}}}},r=function(a){var l=!1;return{next:function(){return l?{done:!0}:(l=!0,{value:a})}}},o=function(a,l){var u=typeof a;if(u==="object"){if(typeof a.next=="function")return a;if(typeof a.then=="function")return r(a)}return u==="function"?t(a)?a():n(a):r(l.resolve(a))},s=function(a,l,u){this.target=a,this.type=l,this.data=u},i=function(a,l,u){if(e.call(this),typeof l!="number"||Math.floor(l)!==l||l<1)throw new Error("Invalid concurrency");this._concurrency=l,this._options=u||{},this._options.promise=this._options.promise||Promise,this._iterator=o(a,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(a){return typeof a<"u"&&(this._concurrency=a,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 a=this,l=this._options.promise;return this._promise=new l(function(u,m){a._callbacks={reject:m,resolve:u},a._proceed()}),this._promise},i.prototype._fireEvent=function(a,l){this.dispatchEvent(new s(this,a,l))},i.prototype._settle=function(a){a?this._callbacks.reject(a):this._callbacks.resolve(),this._promise=null,this._callbacks=null},i.prototype._onPooledPromiseFulfilled=function(a,l){this._size--,this.active()&&(this._fireEvent("fulfilled",{promise:a,result:l}),this._proceed())},i.prototype._onPooledPromiseRejected=function(a,l){this._size--,this.active()&&(this._fireEvent("rejected",{promise:a,error:l}),this._settle(l||new Error("Unknown error")))},i.prototype._trackPromise=function(a){var l=this;a.then(function(u){l._onPooledPromiseFulfilled(a,u)},function(u){l._onPooledPromiseRejected(a,u)}).catch(function(u){l._settle(new Error("Promise processing failed: "+u))})},i.prototype._proceed=function(){if(!this._done){for(var a={done:!1};this._size<this._concurrency&&!(a=this._iterator.next()).done;)this._size++,this._trackPromise(a.value);this._done=a===null||!!a.done}this._done&&this._size===0&&this._settle()},i.PromisePoolEvent=s,i.PromisePool=i,i})});var Ve=ee(G=>{"use strict";p();Object.defineProperty(G,"__esModule",{value:!0});G.sanitizeUrl=void 0;var fn=/^([^\w]*)(javascript|data|vbscript)/im,hn=/&#(\w+)(^\w|;)?/g,mn=/&(newline|tab);/gi,En=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim,Tn=/^.+(:|:)/gim,bn=[".","/"];function gn(e){return bn.indexOf(e[0])>-1}function _n(e){return e.replace(hn,function(t,n){return String.fromCharCode(n)})}function xn(e){var t=_n(e||"").replace(mn,"").replace(En,"").trim();if(!t)return"about:blank";if(gn(t))return t;var n=t.match(Tn);if(!n)return t;var r=n[0];return fn.test(r)?"about:blank":t}G.sanitizeUrl=xn});p();p();var ne=class{constructor(t){this.scoreFunction=t}content=[];sinkDown(t){let n=this.content[t],r=this.scoreFunction(n);for(;t>0;){let o=(t+1>>1)-1,s=this.content[o];if(r<this.scoreFunction(s))this.content[t]=s,t=o;else break}this.content[t]=n}bubbleUp(t){let n=this.content.length,r=this.content[t],o=this.scoreFunction(r);for(;;){let s=(t+1<<1)-1,i=s+1,a=t,l=o;if(s<n){let u=this.scoreFunction(this.content[s]);u<l&&(a=s,l=u)}if(i<n&&this.scoreFunction(this.content[i])<l&&(a=i),a===t)break;this.content[t]=this.content[a],t=a}this.content[t]=r}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))}};p();var On=e=>Array.isArray(e)&&e.length===4&&typeof e[0]=="number"&&typeof e[1]=="number"&&typeof e[2]=="number"&&typeof e[3]=="number";p();p();function C(e){"@babel/helpers - typeof";return C=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},C(e)}var ot=/^\s+/,st=/\s+$/;function c(e,t){if(e=e||"",t=t||{},e instanceof c)return e;if(!(this instanceof c))return new c(e,t);var n=at(e);this._originalInput=e,this._r=n.r,this._g=n.g,this._b=n.b,this._a=n.a,this._roundA=Math.round(100*this._a)/100,this._format=t.format||n.format,this._gradientType=t.gradientType,this._r<1&&(this._r=Math.round(this._r)),this._g<1&&(this._g=Math.round(this._g)),this._b<1&&(this._b=Math.round(this._b)),this._ok=n.ok}c.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var t=this.toRgb();return(t.r*299+t.g*587+t.b*114)/1e3},getLuminance:function(){var t=this.toRgb(),n,r,o,s,i,a;return n=t.r/255,r=t.g/255,o=t.b/255,n<=.03928?s=n/12.92:s=Math.pow((n+.055)/1.055,2.4),r<=.03928?i=r/12.92:i=Math.pow((r+.055)/1.055,2.4),o<=.03928?a=o/12.92:a=Math.pow((o+.055)/1.055,2.4),.2126*s+.7152*i+.0722*a},setAlpha:function(t){return this._a=ce(t),this._roundA=Math.round(100*this._a)/100,this},toHsv:function(){var t=oe(this._r,this._g,this._b);return{h:t.h*360,s:t.s,v:t.v,a:this._a}},toHsvString:function(){var t=oe(this._r,this._g,this._b),n=Math.round(t.h*360),r=Math.round(t.s*100),o=Math.round(t.v*100);return this._a==1?"hsv("+n+", "+r+"%, "+o+"%)":"hsva("+n+", "+r+"%, "+o+"%, "+this._roundA+")"},toHsl:function(){var t=re(this._r,this._g,this._b);return{h:t.h*360,s:t.s,l:t.l,a:this._a}},toHslString:function(){var t=re(this._r,this._g,this._b),n=Math.round(t.h*360),r=Math.round(t.s*100),o=Math.round(t.l*100);return this._a==1?"hsl("+n+", "+r+"%, "+o+"%)":"hsla("+n+", "+r+"%, "+o+"%, "+this._roundA+")"},toHex:function(t){return se(this._r,this._g,this._b,t)},toHexString:function(t){return"#"+this.toHex(t)},toHex8:function(t){return ut(this._r,this._g,this._b,this._a,t)},toHex8String:function(t){return"#"+this.toHex8(t)},toRgb:function(){return{r:Math.round(this._r),g:Math.round(this._g),b:Math.round(this._b),a:this._a}},toRgbString:function(){return this._a==1?"rgb("+Math.round(this._r)+", "+Math.round(this._g)+", "+Math.round(this._b)+")":"rgba("+Math.round(this._r)+", "+Math.round(this._g)+", "+Math.round(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:Math.round(E(this._r,255)*100)+"%",g:Math.round(E(this._g,255)*100)+"%",b:Math.round(E(this._b,255)*100)+"%",a:this._a}},toPercentageRgbString:function(){return this._a==1?"rgb("+Math.round(E(this._r,255)*100)+"%, "+Math.round(E(this._g,255)*100)+"%, "+Math.round(E(this._b,255)*100)+"%)":"rgba("+Math.round(E(this._r,255)*100)+"%, "+Math.round(E(this._g,255)*100)+"%, "+Math.round(E(this._b,255)*100)+"%, "+this._roundA+")"},toName:function(){return this._a===0?"transparent":this._a<1?!1:At[se(this._r,this._g,this._b,!0)]||!1},toFilter:function(t){var n="#"+ae(this._r,this._g,this._b,this._a),r=n,o=this._gradientType?"GradientType = 1, ":"";if(t){var s=c(t);r="#"+ae(s._r,s._g,s._b,s._a)}return"progid:DXImageTransform.Microsoft.gradient("+o+"startColorstr="+n+",endColorstr="+r+")"},toString:function(t){var n=!!t;t=t||this._format;var r=!1,o=this._a<1&&this._a>=0,s=!n&&o&&(t==="hex"||t==="hex6"||t==="hex3"||t==="hex4"||t==="hex8"||t==="name");return s?t==="name"&&this._a===0?this.toName():this.toRgbString():(t==="rgb"&&(r=this.toRgbString()),t==="prgb"&&(r=this.toPercentageRgbString()),(t==="hex"||t==="hex6")&&(r=this.toHexString()),t==="hex3"&&(r=this.toHexString(!0)),t==="hex4"&&(r=this.toHex8String(!0)),t==="hex8"&&(r=this.toHex8String()),t==="name"&&(r=this.toName()),t==="hsl"&&(r=this.toHslString()),t==="hsv"&&(r=this.toHsvString()),r||this.toHexString())},clone:function(){return c(this.toString())},_applyModification:function(t,n){var r=t.apply(null,[this].concat([].slice.call(n)));return this._r=r._r,this._g=r._g,this._b=r._b,this.setAlpha(r._a),this},lighten:function(){return this._applyModification(ht,arguments)},brighten:function(){return this._applyModification(mt,arguments)},darken:function(){return this._applyModification(Et,arguments)},desaturate:function(){return this._applyModification(pt,arguments)},saturate:function(){return this._applyModification(dt,arguments)},greyscale:function(){return this._applyModification(ft,arguments)},spin:function(){return this._applyModification(Tt,arguments)},_applyCombination:function(t,n){return t.apply(null,[this].concat([].slice.call(n)))},analogous:function(){return this._applyCombination(_t,arguments)},complement:function(){return this._applyCombination(bt,arguments)},monochromatic:function(){return this._applyCombination(xt,arguments)},splitcomplement:function(){return this._applyCombination(gt,arguments)},triad:function(){return this._applyCombination(ie,[3])},tetrad:function(){return this._applyCombination(ie,[4])}};c.fromRatio=function(e,t){if(C(e)=="object"){var n={};for(var r in e)e.hasOwnProperty(r)&&(r==="a"?n[r]=e[r]:n[r]=O(e[r]));e=n}return c(e,t)};function at(e){var t={r:0,g:0,b:0},n=1,r=null,o=null,s=null,i=!1,a=!1;return typeof e=="string"&&(e=Mt(e)),C(e)=="object"&&(A(e.r)&&A(e.g)&&A(e.b)?(t=it(e.r,e.g,e.b),i=!0,a=String(e.r).substr(-1)==="%"?"prgb":"rgb"):A(e.h)&&A(e.s)&&A(e.v)?(r=O(e.s),o=O(e.v),t=ct(e.h,r,o),i=!0,a="hsv"):A(e.h)&&A(e.s)&&A(e.l)&&(r=O(e.s),s=O(e.l),t=lt(e.h,r,s),i=!0,a="hsl"),e.hasOwnProperty("a")&&(n=e.a)),n=ce(n),{ok:i,format:e.format||a,r:Math.min(255,Math.max(t.r,0)),g:Math.min(255,Math.max(t.g,0)),b:Math.min(255,Math.max(t.b,0)),a:n}}function it(e,t,n){return{r:E(e,255)*255,g:E(t,255)*255,b:E(n,255)*255}}function re(e,t,n){e=E(e,255),t=E(t,255),n=E(n,255);var r=Math.max(e,t,n),o=Math.min(e,t,n),s,i,a=(r+o)/2;if(r==o)s=i=0;else{var l=r-o;switch(i=a>.5?l/(2-r-o):l/(r+o),r){case e:s=(t-n)/l+(t<n?6:0);break;case t:s=(n-e)/l+2;break;case n:s=(e-t)/l+4;break}s/=6}return{h:s,s:i,l:a}}function lt(e,t,n){var r,o,s;e=E(e,360),t=E(t,100),n=E(n,100);function i(u,m,b){return b<0&&(b+=1),b>1&&(b-=1),b<1/6?u+(m-u)*6*b:b<1/2?m:b<2/3?u+(m-u)*(2/3-b)*6:u}if(t===0)r=o=s=n;else{var a=n<.5?n*(1+t):n+t-n*t,l=2*n-a;r=i(l,a,e+1/3),o=i(l,a,e),s=i(l,a,e-1/3)}return{r:r*255,g:o*255,b:s*255}}function oe(e,t,n){e=E(e,255),t=E(t,255),n=E(n,255);var r=Math.max(e,t,n),o=Math.min(e,t,n),s,i,a=r,l=r-o;if(i=r===0?0:l/r,r==o)s=0;else{switch(r){case e:s=(t-n)/l+(t<n?6:0);break;case t:s=(n-e)/l+2;break;case n:s=(e-t)/l+4;break}s/=6}return{h:s,s:i,v:a}}function ct(e,t,n){e=E(e,360)*6,t=E(t,100),n=E(n,100);var r=Math.floor(e),o=e-r,s=n*(1-t),i=n*(1-o*t),a=n*(1-(1-o)*t),l=r%6,u=[n,i,s,s,a,n][l],m=[a,n,n,i,s,s][l],b=[s,s,a,n,n,i][l];return{r:u*255,g:m*255,b:b*255}}function se(e,t,n,r){var o=[x(Math.round(e).toString(16)),x(Math.round(t).toString(16)),x(Math.round(n).toString(16))];return r&&o[0].charAt(0)==o[0].charAt(1)&&o[1].charAt(0)==o[1].charAt(1)&&o[2].charAt(0)==o[2].charAt(1)?o[0].charAt(0)+o[1].charAt(0)+o[2].charAt(0):o.join("")}function ut(e,t,n,r,o){var s=[x(Math.round(e).toString(16)),x(Math.round(t).toString(16)),x(Math.round(n).toString(16)),x(ue(r))];return o&&s[0].charAt(0)==s[0].charAt(1)&&s[1].charAt(0)==s[1].charAt(1)&&s[2].charAt(0)==s[2].charAt(1)&&s[3].charAt(0)==s[3].charAt(1)?s[0].charAt(0)+s[1].charAt(0)+s[2].charAt(0)+s[3].charAt(0):s.join("")}function ae(e,t,n,r){var o=[x(ue(r)),x(Math.round(e).toString(16)),x(Math.round(t).toString(16)),x(Math.round(n).toString(16))];return o.join("")}c.equals=function(e,t){return!e||!t?!1:c(e).toRgbString()==c(t).toRgbString()};c.random=function(){return c.fromRatio({r:Math.random(),g:Math.random(),b:Math.random()})};function pt(e,t){t=t===0?0:t||10;var n=c(e).toHsl();return n.s-=t/100,n.s=P(n.s),c(n)}function dt(e,t){t=t===0?0:t||10;var n=c(e).toHsl();return n.s+=t/100,n.s=P(n.s),c(n)}function ft(e){return c(e).desaturate(100)}function ht(e,t){t=t===0?0:t||10;var n=c(e).toHsl();return n.l+=t/100,n.l=P(n.l),c(n)}function mt(e,t){t=t===0?0:t||10;var n=c(e).toRgb();return n.r=Math.max(0,Math.min(255,n.r-Math.round(255*-(t/100)))),n.g=Math.max(0,Math.min(255,n.g-Math.round(255*-(t/100)))),n.b=Math.max(0,Math.min(255,n.b-Math.round(255*-(t/100)))),c(n)}function Et(e,t){t=t===0?0:t||10;var n=c(e).toHsl();return n.l-=t/100,n.l=P(n.l),c(n)}function Tt(e,t){var n=c(e).toHsl(),r=(n.h+t)%360;return n.h=r<0?360+r:r,c(n)}function bt(e){var t=c(e).toHsl();return t.h=(t.h+180)%360,c(t)}function ie(e,t){if(isNaN(t)||t<=0)throw new Error("Argument to polyad must be a positive number");for(var n=c(e).toHsl(),r=[c(e)],o=360/t,s=1;s<t;s++)r.push(c({h:(n.h+s*o)%360,s:n.s,l:n.l}));return r}function gt(e){var t=c(e).toHsl(),n=t.h;return[c(e),c({h:(n+72)%360,s:t.s,l:t.l}),c({h:(n+216)%360,s:t.s,l:t.l})]}function _t(e,t,n){t=t||6,n=n||30;var r=c(e).toHsl(),o=360/n,s=[c(e)];for(r.h=(r.h-(o*t>>1)+720)%360;--t;)r.h=(r.h+o)%360,s.push(c(r));return s}function xt(e,t){t=t||6;for(var n=c(e).toHsv(),r=n.h,o=n.s,s=n.v,i=[],a=1/t;t--;)i.push(c({h:r,s:o,v:s})),s=(s+a)%1;return i}c.mix=function(e,t,n){n=n===0?0:n||50;var r=c(e).toRgb(),o=c(t).toRgb(),s=n/100,i={r:(o.r-r.r)*s+r.r,g:(o.g-r.g)*s+r.g,b:(o.b-r.b)*s+r.b,a:(o.a-r.a)*s+r.a};return c(i)};c.readability=function(e,t){var n=c(e),r=c(t);return(Math.max(n.getLuminance(),r.getLuminance())+.05)/(Math.min(n.getLuminance(),r.getLuminance())+.05)};c.isReadable=function(e,t,n){var r=c.readability(e,t),o,s;switch(s=!1,o=Rt(n),o.level+o.size){case"AAsmall":case"AAAlarge":s=r>=4.5;break;case"AAlarge":s=r>=3;break;case"AAAsmall":s=r>=7;break}return s};c.mostReadable=function(e,t,n){var r=null,o=0,s,i,a,l;n=n||{},i=n.includeFallbackColors,a=n.level,l=n.size;for(var u=0;u<t.length;u++)s=c.readability(e,t[u]),s>o&&(o=s,r=c(t[u]));return c.isReadable(e,r,{level:a,size:l})||!i?r:(n.includeFallbackColors=!1,c.mostReadable(e,["#fff","#000"],n))};var W=c.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},At=c.hexNames=yt(W);function yt(e){var t={};for(var n in e)e.hasOwnProperty(n)&&(t[e[n]]=n);return t}function ce(e){return e=parseFloat(e),(isNaN(e)||e<0||e>1)&&(e=1),e}function E(e,t){vt(e)&&(e="100%");var n=St(e);return e=Math.min(t,Math.max(0,parseFloat(e))),n&&(e=parseInt(e*t,10)/100),Math.abs(e-t)<1e-6?1:e%t/parseFloat(t)}function P(e){return Math.min(1,Math.max(0,e))}function g(e){return parseInt(e,16)}function vt(e){return typeof e=="string"&&e.indexOf(".")!=-1&&parseFloat(e)===1}function St(e){return typeof e=="string"&&e.indexOf("%")!=-1}function x(e){return e.length==1?"0"+e:""+e}function O(e){return e<=1&&(e=e*100+"%"),e}function ue(e){return Math.round(parseFloat(e)*255).toString(16)}function le(e){return g(e)/255}var _=function(){var e="[-\\+]?\\d+%?",t="[-\\+]?\\d*\\.\\d+%?",n="(?:"+t+")|(?:"+e+")",r="[\\s|\\(]+("+n+")[,|\\s]+("+n+")[,|\\s]+("+n+")\\s*\\)?",o="[\\s|\\(]+("+n+")[,|\\s]+("+n+")[,|\\s]+("+n+")[,|\\s]+("+n+")\\s*\\)?";return{CSS_UNIT:new RegExp(n),rgb:new RegExp("rgb"+r),rgba:new RegExp("rgba"+o),hsl:new RegExp("hsl"+r),hsla:new RegExp("hsla"+o),hsv:new RegExp("hsv"+r),hsva:new RegExp("hsva"+o),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/}}();function A(e){return!!_.CSS_UNIT.exec(e)}function Mt(e){e=e.replace(ot,"").replace(st,"").toLowerCase();var t=!1;if(W[e])e=W[e],t=!0;else if(e=="transparent")return{r:0,g:0,b:0,a:0,format:"name"};var n;return(n=_.rgb.exec(e))?{r:n[1],g:n[2],b:n[3]}:(n=_.rgba.exec(e))?{r:n[1],g:n[2],b:n[3],a:n[4]}:(n=_.hsl.exec(e))?{h:n[1],s:n[2],l:n[3]}:(n=_.hsla.exec(e))?{h:n[1],s:n[2],l:n[3],a:n[4]}:(n=_.hsv.exec(e))?{h:n[1],s:n[2],v:n[3]}:(n=_.hsva.exec(e))?{h:n[1],s:n[2],v:n[3],a:n[4]}:(n=_.hex8.exec(e))?{r:g(n[1]),g:g(n[2]),b:g(n[3]),a:le(n[4]),format:t?"name":"hex8"}:(n=_.hex6.exec(e))?{r:g(n[1]),g:g(n[2]),b:g(n[3]),format:t?"name":"hex"}:(n=_.hex4.exec(e))?{r:g(n[1]+""+n[1]),g:g(n[2]+""+n[2]),b:g(n[3]+""+n[3]),a:le(n[4]+""+n[4]),format:t?"name":"hex8"}:(n=_.hex3.exec(e))?{r:g(n[1]+""+n[1]),g:g(n[2]+""+n[2]),b:g(n[3]+""+n[3]),format:t?"name":"hex"}:!1}function Rt(e){var t,n;return e=e||{level:"AA",size:"small"},t=(e.level||"AA").toUpperCase(),n=(e.size||"small").toLowerCase(),t!=="AA"&&t!=="AAA"&&(t="AA"),n!=="small"&&n!=="large"&&(n="small"),{level:t,size:n}}import{clamp as V}from"@excalidraw/math";import{degreesToRadians as Ot}from"@excalidraw/math";var Y=typeof window<"u"?new Map:null,pe=93,de=180;function fe(e,t,n,r){let o=e/255,s=t/255,i=n/255,a=Ot(r),l=Math.cos(a),u=Math.sin(a),m=[.213+l*.787-u*.213,.715-l*.715-u*.715,.072-l*.072+u*.928,.213-l*.213+u*.143,.715+l*.285+u*.14,.072-l*.072-u*.283,.213-l*.213-u*.787,.715-l*.715+u*.715,.072+l*.928+u*.072],b=o*m[0]+s*m[1]+i*m[2],Q=o*m[3]+s*m[4]+i*m[5],y=o*m[6]+s*m[7]+i*m[8];return{r:Math.round(Math.max(0,Math.min(1,b))*255),g:Math.round(Math.max(0,Math.min(1,Q))*255),b:Math.round(Math.max(0,Math.min(1,y))*255)}}var Lt=(e,t,n,r)=>{let o=V(r,0,100)/100,s=u=>{let m=u*(1-o)+(255-u)*o;return Math.round(V(m,0,255))},i=s(e),a=s(t),l=s(n);return{r:i,g:a,b:l}},Nn=(e,t=!0)=>{if(!t)return e;let n=Y?.get(e);if(n)return n;let r=c(e),o=r.getAlpha(),s=r.toRgb(),i=Lt(s.r,s.g,s.b,pe),a=fe(i.r,i.g,i.b,de),l=N(a.r,a.g,a.b,o);return Y&&Y.set(e,l),l},It=(e,t,n)=>{let r=pe/100,o=1-2*r,s=i=>Math.round(V((i-255*r)/o,0,255));return{r:s(e),g:s(t),b:s(n)}},kn=e=>{let t=c(e),n=t.getAlpha(),r=t.toRgb(),o=fe(r.r,r.g,r.b,de),s=It(o.r,o.g,o.b);return N(s.r,s.g,s.b,n)},wt=(e,t)=>t.reduce((n,r)=>(r in e&&(n[r]=e[r]),n),{}),Un=5,Hn=5,Kn=4,D=4,v=1,d={transparent:"transparent",black:"#1e1e1e",white:"#ffffff",gray:["#f8f9fa","#e9ecef","#ced4da","#868e96","#343a40"],red:["#fff5f5","#ffc9c9","#ff8787","#fa5252","#e03131"],pink:["#fff0f6","#fcc2d7","#f783ac","#e64980","#c2255c"],grape:["#f8f0fc","#eebefa","#da77f2","#be4bdb","#9c36b5"],violet:["#f3f0ff","#d0bfff","#9775fa","#7950f2","#6741d9"],blue:["#e7f5ff","#a5d8ff","#4dabf7","#228be6","#1971c2"],cyan:["#e3fafc","#99e9f2","#3bc9db","#15aabf","#0c8599"],teal:["#e6fcf5","#96f2d7","#38d9a9","#12b886","#099268"],green:["#ebfbee","#b2f2bb","#69db7c","#40c057","#2f9e44"],yellow:["#fff9db","#ffec99","#ffd43b","#fab005","#f08c00"],orange:["#fff4e6","#ffd8a8","#ffa94d","#fd7e14","#e8590c"],bronze:["#f8f1ee","#eaddd7","#d2bab0","#a18072","#846358"]},he=wt(d,["cyan","blue","violet","grape","pink","green","teal","yellow","orange","red"]),Gn=5,Ft=[d.black,d.red[D],d.green[D],d.blue[D],d.yellow[D]],Bn=[d.transparent,d.red[v],d.green[v],d.blue[v],d.yellow[v]],Wn=[d.white,d.red[v],d.green[v],d.blue[v],d.yellow[v]],me="#ffdf6b",Yn=Ft,Vn=[me,d.pink[1],d.green[1],d.blue[1],d.orange[1]],zn=[d.white,"#f8f9fa","#f5faff","#fffce8","#fdf8f6"],$n={transparent:d.transparent,white:d.white,gray:d.gray,black:d.black,bronze:d.bronze,...he},Xn={transparent:d.transparent,white:d.white,gray:d.gray,black:d.black,bronze:d.bronze,...he},jn=e=>[d.cyan[e],d.blue[e],d.violet[e],d.grape[e],d.pink[e],d.green[e],d.teal[e],d.yellow[e],d.orange[e],d.red[e]],N=(e,t,n,r)=>{let o=`#${(16777216+(e<<16)+(t<<8)+n).toString(16).slice(1)}`;if(r!==void 0&&r<1){let s=Math.round(r*255).toString(16).padStart(2,"0");return`${o}${s}`}return o},qn=(e,t)=>{let n=c(e);if(!n.isValid())return e;let{r,g:o,b:s}=n.toRgb();return N(r,o,s,t)},Zn=e=>{let t=c(e);if(!t.isValid())return null;let{r:n,g:r,b:o,a:s}=t.toRgb();return N(n,r,o,s)},Ee=e=>c(e).getAlpha()===0,Qn=e=>c(e).getAlpha()===1,Jn=240,Ct=(e,t,n)=>(e*299+t*587+n*114)/1e3,er=(e,t=160)=>{if(!e)return!0;if(Ee(e))return!1;let n=c(e);if(!n.isValid())return!0;let{r,g:o,b:s}=n.toRgb();return Ct(r,o,s)<t},tr=e=>{if(e=e.trim(),Ee(e))return e;let t=c(e);return t.isValid()?["hex","hex8"].includes(t.getFormat())&&!e.startsWith("#")?`#${e}`:e:null};p();var sr=typeof window<"u"&&"ResizeObserver"in window,ar="Excalidraw",ir=36,lr=10,cr=20,ur=8,pr=5,dr=1,fr=30,hr=Math.PI/12,mr="red",Er={TEXT:"text",CROSSHAIR:"crosshair",GRABBING:"grabbing",GRAB:"grab",POINTER:"pointer",MOVE:"move",AUTO:""},Tr={MAIN:0,WHEEL:1,SECONDARY:2,TOUCH:-1,ERASER:5},br={enabled:"all",disabled:"none",inheritFromUI:"var(--ui-pointerEvents)"},Pt=(f=>(f.COPY="copy",f.PASTE="paste",f.CUT="cut",f.KEYDOWN="keydown",f.KEYUP="keyup",f.MOUSE_MOVE="mousemove",f.RESIZE="resize",f.UNLOAD="unload",f.FOCUS="focus",f.BLUR="blur",f.DRAG_OVER="dragover",f.DROP="drop",f.GESTURE_END="gestureend",f.BEFORE_UNLOAD="beforeunload",f.GESTURE_START="gesturestart",f.GESTURE_CHANGE="gesturechange",f.POINTER_MOVE="pointermove",f.POINTER_DOWN="pointerdown",f.POINTER_UP="pointerup",f.POINTER_CANCEL="pointercancel",f.STATE_CHANGE="statechange",f.WHEEL="wheel",f.TOUCH_START="touchstart",f.TOUCH_END="touchend",f.HASHCHANGE="hashchange",f.VISIBILITY_CHANGE="visibilitychange",f.SCROLL="scroll",f.EXCALIDRAW_LINK="excalidraw-link",f.MENU_ITEM_SELECT="menu.itemSelect",f.MESSAGE="message",f.FULLSCREENCHANGE="fullscreenchange",f))(Pt||{}),gr={UNSTARTED:-1,ENDED:0,PLAYING:1,PAUSED:2,BUFFERING:3,CUED:5},k={TEST:"test",DEVELOPMENT:"development",PRODUCTION:"production"},_r={SIDEBAR:"sidebar",SHAPE_ACTIONS_MENU:"App-menu__left",ZOOM_ACTIONS:"zoom-actions",SEARCH_MENU_INPUT_WRAPPER:"layer-ui__search-inputWrapper",CONVERT_ELEMENT_TYPE_POPUP:"ConvertElementTypePopup",SHAPE_ACTIONS_THEME_SCOPE:"shape-actions-theme-scope",FRAME_NAME:"frame-name",DROPDOWN_MENU_EVENT_WRAPPER:"dropdown-menu-event-wrapper"},xr={sm:16,md:20,lg:28,xl:36},be="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},ge="sans-serif",_e="monospace",Dt={[ge]:998,[_e]:999},z={[be]:100,...Dt,[L]:1e3};function Nt(e){switch(e){case T.Cascadia:case T["Comic Shanns"]:return _e;default:return ge}}var xe=e=>{let t=Nt(e);switch(e){case T.Excalifont:return[be,t,L];default:return[t,L]}},Ar={LIGHT:"light",DARK:"dark"},yr="invert(93%) hue-rotate(180deg)",vr={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},Sr=1,Mr=20,Rr=16,Or=512,Lr=28,Ir=2,kt=16,Ut={height:20,fontSize:12,fontFamily:"Helvetica, Arial, sans-serif",baselineFromBottom:14,opacity:1,minBodyWidthForYear:80},wr=kt*2+Ut.height,Fr=250,Cr=75,Pr=3,Dr=.16,Nr=.5,kr=.08,Ur=T.Excalifont,Hr=3,Kr="left",Gr="top",Ae="{version}",Ht=2,Kt=2*Ht,Gt=1e-5,Br=2*Kt-Gt,Wr="#ffffff",Yr="#1e1e1e",Vr="#a2f1a6",zr=["selectAll"],$r=20,Xr=5,ye={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"},Bt={text:"text/plain",html:"text/html",json:"application/json",excalidraw:"application/vnd.excalidraw+json",excalidrawClipboard:"application/vnd.excalidraw.clipboard+json",excalidrawlib:"application/vnd.excalidrawlib+json",excalidrawlibIds:"application/vnd.excalidrawlib.ids+json"},Te={...Bt,"excalidraw.svg":"image/svg+xml","excalidraw.png":"image/png",binary:"application/octet-stream",...ye},jr=[Te.text,Te.html,...Object.values(ye)],qr={png:"png",svg:"svg",clipboard:"clipboard"},Zr={excalidraw:"excalidraw",excalidrawClipboard:"excalidraw/clipboard",excalidrawLibrary:"excalidrawlib",excalidrawClipboardWithAPI:"excalidraw-api/clipboard"},Qr=()=>window.EXCALIDRAW_EXPORT_SOURCE||window.location.origin,Jr=500,eo=300,to=500,no=1e4,ro=3e4,oo=100,so=.1,ao=.1,io=30,lo=Object.freeze({value:1}),co=300,uo=6e4,po=3e3,fo={addLibrary:"addLibrary"},ho={addLibrary:"addLibrary"},mo={canvasActions:{changeViewBackgroundColor:!0,clearCanvas:!0,export:{saveFileToDisk:!0},loadScene:!0,saveToActiveFile:!0,toggleTheme:null,saveAsImage:!0},tools:{image:!0}},Eo=2,To=[1,2,3],bo=10,go={maxWidthOrHeight:1440,maxFileSizeBytes:4*1024*1024},_o="http://www.w3.org/2000/svg",xo=`<?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
|
-
`,zr=128,Xr={excalidraw:2,excalidrawLibrary:2},jr=5,qr=.7,Zr=11,Qr={TOP:"top",MIDDLE:"middle",BOTTOM:"bottom"},Jr={LEFT:"left",CENTER:"center",RIGHT:"right"},eo=20,to=.25,no=32,ro={LEGACY:1,PROPORTIONAL_RADIUS:2,ADAPTIVE_RADIUS:3},Pt={architect:0,artist:1,cartoonist:2},oo=["thin","medium","bold"],ge={thin:1,medium:2,bold:4,extraBold:8},Dt={thin:.5,medium:1,bold:2,extraBold:4},so=(e,t)=>e==="freedraw"?Dt[t]:ge[t],kt="medium",ao={strokeColor:d.black,backgroundColor:d.transparent,fillStyle:"solid",strokeWidth:ge[kt],strokeStyle:"solid",roughness:Pt.artist,opacity:100,locked:!1},Ut="library",io="search",lo={name:"default",defaultTab:Ut},co=new Set(["iframe","embeddable","image"]),uo={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"},po={OAI_API_KEY:"excalidraw-oai-api-key",MERMAID_TO_EXCALIDRAW:"mermaid-to-excalidraw",PUBLISH_LIBRARY:"publish-library-data"},fo="Untitled",ho={generalStats:1,elementProperties:2},mo=1,Eo={sharp:"sharp",round:"round",elbow:"elbow"},To=.3,bo="element",go=Symbol.for("__test__originalId__"),Nt=(r=>(r.ACTIVE="active",r.AWAY="away",r.IDLE="idle",r))(Nt||{}),_o=20,xo=35,Ao=700,yo={background:"var(--mobile-action-button-bg)"},vo=.5,So=.2;p();var U={[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},[W.Xiaolai]:{metrics:{unitsPerEm:1e3,ascender:880,descender:-144,lineHeight:1.25},fallback:!0},[W["Segoe UI Emoji"]]:{metrics:{unitsPerEm:1e3,ascender:886,descender:-374,lineHeight:1.25},local:!0,fallback:!0}},Oo={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"},wo="local:",Fo=(e,t,n)=>{let{unitsPerEm:r,ascender:o,descender:s}=U[e]?.metrics||U[T.Excalifont].metrics,i=t/r,a=(n-i*o+i*s)/2;return i*o+a},Io=e=>{let{lineHeight:t}=U[e]?.metrics||U[T.Excalifont].metrics;return t};p();var _e=class{jobs=[];running=!1;tick(){if(this.running)return;let t=this.jobs.shift();t?(this.running=!0,t.promise.resolve(Ae(t.jobFactory,...t.args).finally(()=>{this.running=!1,this.tick()}))):this.running=!1}push(t,...n){let r=xe();return this.jobs.push({jobFactory:t,promise:r,args:n}),this.tick(),r}};p();p();var ye="excalidraw.desktopUIMode",No=599,Ho=1e3,Go=500,Bo=600,Ko=1180,Wo=1440,Vo=1229,ve=/Mac|iPod|iPhone|iPad/.test(navigator.platform),Yo=/^Win/.test(navigator.platform),Se=/\b(android)\b/i.test(navigator.userAgent),$o=typeof window<"u"&&"netscape"in window&&navigator.userAgent.indexOf("rv:")>1&&navigator.userAgent.indexOf("Gecko")>1,Ht=navigator.userAgent.indexOf("Chrome")!==-1,zo=!Ht&&navigator.userAgent.indexOf("Safari")!==-1,Me=/iPad|iPhone/i.test(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document,Xo=()=>navigator.brave?.isBrave?.name==="isBrave",Gt=(e,t)=>e<=599||t<500&&e<1e3,Bt=(e,t)=>{let n=Math.min(e,t),r=Math.max(e,t);return n>=600&&r<=1180},Kt=()=>{let e=navigator.userAgent||"",t=navigator.platform||"",n=navigator.userAgentData;if(n){let o=(n.platform||"").toLowerCase(),s=o==="windows"||o==="macos"||o==="linux"||o==="chrome os";if(n.mobile===!0)return!0;if(n.mobile===!1&&o==="android")return matchMedia?.("(hover: none)").matches&&matchMedia?.("(pointer: coarse)").matches;if(s)return!1}if(Me)return!0;if(Se){let o=/Mobile/i.test(e);if(o||!o)return matchMedia?.("(hover: none)").matches&&matchMedia?.("(pointer: coarse)").matches}return/Win|Linux|CrOS|Mac/.test(t)||/Windows NT|X11|CrOS|Macintosh/.test(e),!1},jo=(e,t)=>Gt(e,t)?"phone":Bt(e,t)?"tablet":"desktop",qo=e=>e.formFactor==="phone"?"mobile":e.formFactor==="tablet"?"compact":e.desktopUIMode,Zo=e=>{let t=e??"",n="unknown";return Me?n="ios":Se?n="android":t&&(n="other"),{isMobileDevice:Kt(),platform:n}},Qo=()=>{if(typeof window>"u")return null;try{let e=window.localStorage.getItem(ye);if(e==="compact"||e==="full")return e}catch{}return null},Wt=e=>{if(!(typeof window>"u"))try{window.localStorage.setItem(ye,e)}catch{}},Jo=e=>{if(!(e!=="compact"&&e!=="full"))return Wt(e),e};var Re={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"},S={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:ve?"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"},Vt=new Map([[S.Z,Re.Z],[S.Y,Re.Y]]),Yt=e=>/^[a-z]$/.test(e.toLowerCase()),rs=(e,t)=>{if(t===e.key.toLowerCase())return!0;let n=Vt.get(t);return!!(n&&!Yt(e.key)&&e.code===n)},os=e=>e===S.ARROW_LEFT||e===S.ARROW_RIGHT||e===S.ARROW_DOWN||e===S.ARROW_UP,ss=e=>e.altKey,as=e=>e.shiftKey,is=e=>e.shiftKey;p();import{pointFromPair as $t}from"@excalidraw/math";var ps=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)}},ds=(e,t,n,r)=>{let o=n.map(y=>y[e]),s=Math.max(...o),i=Math.min(...o),a=s-i,l=a===0?1:t/a,u=1/0,m=n.map(y=>{let v=y[e]*l,F=[...y];return F[e]=v,v<u&&(u=v),F});if(!r||m.length===2)return m;let b=i-u;return m.map(y=>$t(y.map((v,F)=>F===e?v+b:v)))},fs=(e,t,n)=>n?[Math.round(e/n)*n,Math.round(t/n)*n]:[e,t];p();var Fe=Q(Oe(),1),we=class{pool;entries={};constructor(t,n){this.pool=new Fe.default(t,n)}all(){let t=n=>{if(n.data.result){let[r,o]=n.data.result;this.entries[r]=o}};return this.pool.addEventListener("fulfilled",t),this.pool.start().then(()=>(setTimeout(()=>{this.pool.removeEventListener("fulfilled",t)}),Object.values(this.entries)))}};p();p();p();var Ie=(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),"");p();var O=class{constructor(t){this.seed=t}next(){return this.seed?(2**31-1&(this.seed=Math.imul(48271,this.seed)))/2**31:Math.random()}};p();import{average as N}from"@excalidraw/math";var Y=null,Os=e=>{Y=e},ws=()=>{if(Y)return Y;let e=new Date,t=e.getFullYear(),n=`${e.getMonth()+1}`.padStart(2,"0"),r=`${e.getDate()}`.padStart(2,"0"),o=`${e.getHours()}`.padStart(2,"0"),s=`${e.getMinutes()}`.padStart(2,"0");return`${t}-${n}-${r}-${o}${s}`},Fs=e=>e.charAt(0).toUpperCase()+e.slice(1),Is=e=>e instanceof HTMLElement&&e.className.includes("ToolIcon"),zt=e=>e instanceof HTMLElement&&e.dataset.type==="wysiwyg"||e instanceof HTMLBRElement||e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement||e instanceof HTMLSelectElement,Cs=e=>zt(e)||e instanceof Element&&!!e.closest("label, button"),Ps=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"||e.type==="search")||e instanceof HTMLElement&&e.closest(".cm-editor")!==null,Xt=({fontFamily:e})=>{for(let[t,n]of Object.entries(T))if(n===e)return`${t}${Ee(n).map(r=>`, ${r}`).join("")}`;return L},Ds=({fontSize:e,fontFamily:t})=>`${e}px ${Xt({fontFamily:t})}`,ks=async e=>{requestAnimationFrame(()=>requestAnimationFrame(e))},Us=(e,t)=>{let n=0,r=null,o=(...s)=>{r=s,clearTimeout(n),n=window.setTimeout(()=>{r=null,e(...s)},t)};return o.flush=()=>{if(clearTimeout(n),r){let s=r;r=null,e(...s)}},o.cancel=()=>{r=null,clearTimeout(n)},o},Ns=e=>{let t=null,n=null,r=()=>{t=window.requestAnimationFrame(()=>{t=null;let s=n;n=null,s&&e(...s)})},o=(...s)=>{n=s,t===null&&r()};return o.flush=()=>{t!==null&&(cancelAnimationFrame(t),t=null),n&&(e(...n),n=null)},o.cancel=()=>{n=null,t!==null&&(cancelAnimationFrame(t),t=null)},o},Hs=e=>1-Math.pow(1-e,4),Gs=(e,t)=>{if(!e.length||t<1)return[];let n=0,r=0,o=Array(Math.ceil(e.length/t));for(;n<e.length;)o[r++]=e.slice(n,n+=t);return o},Bs=e=>{let t=window.getSelection();if(t){let n=document.createRange();n.selectNodeContents(e),t.removeAllRanges(),t.addRange(n)}},Ks=()=>{let e=window.getSelection();e&&e.removeAllRanges()},Ws=(e,t)=>Math.abs(e-t),Vs=e=>e==="selection"||e==="lasso",Ys=(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},$s=()=>document.fullscreenElement?.nodeName==="HTML",zs=()=>document.documentElement.requestFullscreen(),Xs=()=>document.exitFullscreen(),js=({clientX:e,clientY:t},{zoom:n,offsetLeft:r,offsetTop:o,scrollX:s,scrollY:i})=>{let a=(e-r)/n.value-s,l=(t-o)/n.value-i;return{x:a,y:l}},qs=({sceneX:e,sceneY:t},{zoom:n,offsetLeft:r,offsetTop:o,scrollX:s,scrollY:i})=>{let a=(e+s)*n.value+r,l=(t+i)*n.value+o;return{x:a,y:l}},Zs=e=>getComputedStyle(document.documentElement).getPropertyValue(`--${e}`),jt="A-Za-z\xC0-\xD6\xD8-\xF6\xF8-\u02B8\u0300-\u0590\u0800-\u1FFF\u2C00-\uFB1C\uFDFE-\uFE6F\uFEFD-\uFFFF",qt="\u0591-\u07FF\uFB1D-\uFDFD\uFE70-\uFEFC",Zt=new RegExp(`^[^${jt}]*[${qt}]`),Qs=e=>Zt.test(e),Js=e=>{let[t,n]=e;return{x:t,y:n}},ea=e=>{if(e?.name==="AbortError"){console.warn(e);return}throw e},ta=(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},na=(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},ra=(e,t)=>{for(let n=0;n<e.length;n++){let r=t(e[n],n);if(r!=null)return r}},xe=()=>{let e,t,n=new Promise((r,o)=>{e=r,t=o});return n.resolve=e,n.reject=t,n},oa=(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+$/,o;for(o=n.length-1;o>0&&!(e>=n[o].value);o--);return(e/n[o].value).toFixed(t).replace(r,"$1")+n[o].symbol},sa=()=>document.querySelector('meta[name="version"]')?.content||Te,aa=()=>{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},ia=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},la=e=>{let t=e.parentElement;for(;t;){if(t.tabIndex>-1){t.focus();return}t=t.parentElement}},ca=e=>{e.preventDefault(),e.returnValue=""},ua=e=>Array.from(e).map(t=>`0${t.toString(16)}`.slice(-2)).join(""),pa=()=>z()?1:Date.now(),da=e=>e instanceof Map?e:e.reduce((t,n)=>(t.set(typeof n=="string"?n:n.id,n),t),new Map),fa=e=>e.reduce((t,n,r)=>(t.set(n.id,[n,r]),t),new Map),ha=(e,t)=>e.reduce((n,r,o)=>(n[t?t(r):o]=r,n),{}),ma=e=>e.reduce((t,n,r)=>{let o={...n,prev:null,next:null};if(r!==0){let s=t[r-1];if(o.prev=s,s.next=o,r===e.length-1){let i=t[0];o.next=i,i.prev=o}}return t.push(o),t},[]),Qt=e=>Array.isArray(e)?e:e.values(),Ea=e=>Array.isArray(e)?e:Array.from(Qt(e)),z=()=>h.MODE===k.TEST,Ta=()=>h.MODE===k.DEVELOPMENT,Pe=()=>h.MODE===k.PRODUCTION,ba=()=>typeof process<"u"&&!0,ga=(e,t)=>new CustomEvent(e,{detail:{nativeEvent:t},cancelable:!0}),_a=(e,t)=>{let n=!1;for(let r in t){let o=t[r];if(typeof o<"u"){if(e[r]===o&&(typeof o!="object"||o===null))continue;n=!0}}return n?{...e,...t}:e},xa=e=>{let t=typeof e;return e==null||t!=="object"&&t!=="function"},Jt=()=>{try{return window.self===window.top?"top":"iframe"}catch{return"iframe"}},Aa=()=>Jt()==="iframe",ya=e=>!!e&&typeof e=="object"&&"then"in e&&"catch"in e&&"finally"in e,va=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):[]},Ce=(e,t)=>Array.isArray(e)&&Array.isArray(t)&&e.length===0&&t.length===0?!0:e===t,en=(e,t,n,r=!1)=>{let o=Object.keys(e),s=Object.keys(t);if(o.length!==s.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]||Ce(e[i],t[i])))return r&&console.warn(`%cisShallowEqual: ${i} not equal ->`,"color: #8B4000",e[i],t[i]),!1;return!0}return o.every(i=>{let a=n?.[i],l=a?a(e[i],t[i]):e[i]===t[i]||Ce(e[i],t[i]);return!l&&r&&console.warn(`%cisShallowEqual: ${i} not equal ->`,"color: #8B4000",e[i],t[i]),l})},Sa=(e,t,{checkForDefaultPrevented:n=!0}={})=>function(o){if(e?.(o),!n||!o?.defaultPrevented)return t?.(o)},Ma=(e,t,n)=>{if(!t)return e;if(n)return console.error(t),e;throw new Error(t)};function Ra(e,t){if(!e)throw new Error(t)}var La=e=>{let t,n,r=function(o){let s=Object.entries(o);if(t){let a=!0;for(let[l,u]of s)if(t.get(l)!==u){a=!1;break}if(a)return n}let i=e(o);return t=new Map(s),n=i,i};return r.clear=()=>{t=void 0,n=void 0},r},Oa=(e,t)=>e instanceof Set||e instanceof Map?e.has(t):"includes"in e?e.includes(t):e.hasOwnProperty(t),wa=e=>JSON.parse(JSON.stringify(e)),Fa=(e,t)=>en(e,t)?e:t;function Ia(e,t,n,r){return e?(e?.addEventListener?.(t,n,r),()=>{e?.removeEventListener?.(t,n,r)}):()=>{}}function Ca(e,t=!0){let n=e.length;if(n<4)return"";let r=e[0],o=e[1],s=e[2],i=`M${r[0].toFixed(2)},${r[1].toFixed(2)} Q${o[0].toFixed(2)},${o[1].toFixed(2)} ${N(o[0],s[0]).toFixed(2)},${N(o[1],s[1]).toFixed(2)} T`;for(let a=2,l=n-1;a<l;a++)r=e[a],o=e[a+1],i+=`${N(r[0],o[0]).toFixed(2)},${N(r[1],o[1]).toFixed(2)} `;return t&&(i+="Z"),i}var Pa=e=>e.replace(/\r?\n|\r/g,`
|
|
4
|
-
`);function Da(e){return e}var Ae=async(e,...t)=>new Promise(n=>{n(e(...t))}),ka=(...e)=>Math.max(...e.map(t=>t?1:0))>0,Ua=e=>{try{return JSON.parse(e)}catch{return null}},De=e=>e.replace(/"/g,"""),Na=e=>Array.isArray(e)?e:[e],tn=e=>Array.isArray(e),nn=e=>tn(e)?e.length:e instanceof Map||e instanceof Set?e.size:Object.keys(e).length,Ha=(e,t)=>{if(nn(e)===0)return null;let n=t||(o=>o),r=null;for(let o of e){let s=n(o);if((r===null||r===s)&&s!=null)r=s;else return null}return r},ke="excalidraw-feature-flags",$={COMPLEX_BINDINGS:!1},M=null,Ga=e=>{if(!M)try{let t=localStorage.getItem(ke);t&&(M=JSON.parse(t)??$)}catch{}return(M||$)[e]},Ba=(e,t)=>{try{M={...M||$,[e]:t},localStorage.setItem(ke,JSON.stringify(M))}catch(n){console.error("unable to set feature flag",n)}},Ka=(e,t)=>t.includes(e);var Ue=new O(Date.now()),Ne=0,Xa=()=>Math.floor(Ue.next()*2**31),ja=e=>{Ue=new O(e),Ne=0},qa=()=>z()?`id${Ne++}`:Ie();p();var Ge=Q(He(),1);var fn=e=>(e=e.trim(),e&&(0,Ge.sanitizeUrl)(De(e))),ni=e=>!!(e?.includes(location.origin)||e?.startsWith("/")),ri=e=>{if(e=fn(e),e.startsWith("/"))return`${location.origin}${e}`;try{new URL(e)}catch{return"about:blank"}return e};p();var G=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(o=>typeof o=="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=[]}};p();var Be=class{constructor(t){this.behavior=t}emitters=new Map;lastPayload=new Map;emittedOnce=new Set;getEmitter(t){let n=this.emitters.get(t);return n||(n=new G,this.emitters.set(t,n)),n}toPromiseValue(t){return t.length===1?t[0]:t}on(t,n){let r=this.behavior[t],o=this.lastPayload.get(t);if(n)return r.replay==="last"&&o&&(queueMicrotask(()=>n(...o)),r.cardinality==="once")?()=>{}:this.getEmitter(t).on(n);if(r.cardinality!=="once"||r.replay!=="last")throw new Error(`Event "${String(t)}" requires a callback`);return o?Promise.resolve(this.toPromiseValue(o)):new Promise(s=>{this.getEmitter(t).once((...i)=>{s(this.toPromiseValue(i))})})}emit(t,...n){let r=this.behavior[t];if(!Pe()&&r.cardinality==="once"){if(this.emittedOnce.has(t))throw new Error(`Event "${String(t)}" can only be emitted once`);this.emittedOnce.add(t)}r.replay==="last"&&this.lastPayload.set(t,n);try{this.getEmitter(t).trigger(...n)}finally{r.cardinality==="once"&&this.getEmitter(t).clear()}}clear(){this.lastPayload.clear(),this.emittedOnce.clear();for(let t of this.emitters.values())t.clear();this.emitters.clear()}};p();var Ke=class{constructor(t,n=Object.is){this.isEqual=n;this.value=t}version=0;value;waiters=new Set;subscribers=new Set;getSnapshot(){return{version:this.version,value:this.value}}set(t){if(this.isEqual(this.value,t))return!1;this.value=t,this.version+=1;let n=this.getSnapshot();for(let r of this.subscribers)r(n);for(let r of this.waiters)r(n);return this.waiters.clear(),!0}update(t){return this.set(t(this.value))}subscribe(t){return this.subscribers.add(t),()=>{this.subscribers.delete(t)}}pull(t=-1){return this.version!==t?Promise.resolve(this.getSnapshot()):new Promise(n=>{this.waiters.add(n)})}};p();var w=(e,t=5)=>parseFloat(e.toPrecision(t)),hn=e=>w(e.reduce((t,n)=>t+n)/e.length),X=class e{static DEBUG_LOG_TIMES=!0;static TIMES_AGGR={};static TIMES_AVG={};static LAST_DEBUG_LOG_CALL=0;static DEBUG_LOG_INTERVAL_ID=null;static LAST_FRAME_TIMESTAMP=0;static FRAME_COUNT=0;static ANIMATION_FRAME_ID=null;static scheduleAnimationFrame=()=>{e.DEBUG_LOG_INTERVAL_ID!==null&&(e.ANIMATION_FRAME_ID=requestAnimationFrame(t=>{e.LAST_FRAME_TIMESTAMP!==t&&(e.LAST_FRAME_TIMESTAMP=t,e.FRAME_COUNT++),e.DEBUG_LOG_INTERVAL_ID!==null&&e.scheduleAnimationFrame()}))};static setupInterval=()=>{e.DEBUG_LOG_INTERVAL_ID===null&&(console.info("%c(starting perf recording)","color: lime"),e.DEBUG_LOG_INTERVAL_ID=window.setInterval(e.debugLogger,1e3),e.scheduleAnimationFrame()),e.LAST_DEBUG_LOG_CALL=Date.now()};static debugLogger=()=>{if(e.DEBUG_LOG_TIMES){for(let[t,{t:n,times:r}]of Object.entries(e.TIMES_AGGR))r.length&&(console.info(t,w(r.reduce((o,s)=>o+s)),r.sort((o,s)=>o-s).map(o=>w(o))),e.TIMES_AGGR[t]={t:n,times:[]});for(let[t,{t:n,times:r,avg:o}]of Object.entries(e.TIMES_AVG))if(r.length){let s=r.reduce((a,l)=>a+l),i=w(s/e.FRAME_COUNT);console.info(t,`- ${r.length} calls - ${i}ms/frame across ${e.FRAME_COUNT} frames (${w(i/16.67*100,1)}% of frame budget)`),e.TIMES_AVG[t]={t:n,times:[],avg:o!=null?hn([o,i]):i}}}e.FRAME_COUNT=0,Date.now()-e.LAST_DEBUG_LOG_CALL>600&&e.DEBUG_LOG_INTERVAL_ID!==null&&(console.info("%c(stopping perf recording)","color: red"),window.clearInterval(e.DEBUG_LOG_INTERVAL_ID),window.cancelAnimationFrame(e.ANIMATION_FRAME_ID),e.ANIMATION_FRAME_ID=null,e.FRAME_COUNT=0,e.LAST_FRAME_TIMESTAMP=0,e.DEBUG_LOG_INTERVAL_ID=null,e.TIMES_AGGR={},e.TIMES_AVG={})};static logTime=(t,n="default")=>{e.setupInterval();let r=performance.now(),{t:o,times:s}=e.TIMES_AGGR[n]=e.TIMES_AGGR[n]||{t:0,times:[]};o&&s.push(t??r-o),e.TIMES_AGGR[n].t=r};static logTimeAverage=(t,n="default")=>{e.setupInterval();let r=performance.now(),{t:o,times:s}=e.TIMES_AVG[n]=e.TIMES_AVG[n]||{t:0,times:[]};o&&s.push(t??r-o),e.TIMES_AVG[n].t=r};static logWrapper=t=>(n,r="default")=>(...o)=>{let s=performance.now(),i=n(...o);return e[t](performance.now()-s,r),i};static logTimeWrap=e.logWrapper("logTime");static logTimeAverageWrap=e.logWrapper("logTimeAverage");static perfWrap=(t,n="default")=>(...r)=>{console.time(n);let o=t(...r);return console.timeEnd(n),o};static CHANGED_CACHE={};static logChanged(t,n){let r=e.CHANGED_CACHE[t];if(e.CHANGED_CACHE[t]=n,!r)return;let o=new Set([...Object.keys(r),...Object.keys(n)]),s={};for(let i of o){let a=r[i],l=n[i];We(a,l)||(s[i]={prev:a,next:l})}Object.keys(s).length>0&&console.info(`[${t}] changed:`,s)}};function We(e,t){if(Object.is(e,t))return!0;if(e===null||t===null||typeof e!="object"||typeof t!="object"||Array.isArray(e)!==Array.isArray(t))return!1;let n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(let o of n)if(!We(e[o],t[o]))return!1;return!0}export{Ur as ACTIVE_THRESHOLD,Ar as ALLOWED_PASTE_MIME_TYPES,Yn as APP_NAME,Zr as ARROW_LABEL_FONT_SIZE_TO_MIN_WIDTH_RATIO,qr as ARROW_LABEL_WIDTH_FRACTION,Eo as ARROW_TYPE,Be as AppEventBus,Ao as BIND_MODE_TIMEOUT,jr as BOUND_TEXT_PADDING,J as BinaryHeap,gr as CANVAS_ONLY_ACTIONS,io as CANVAS_SEARCH_TAB,fe as CJK_HAND_DRAWN_FALLBACK_FONT,sr as CLASSES,Re as CODES,On as COLORS_PER_ROW,Tr as COLOR_CHARCOAL_BLACK,Nn as COLOR_OUTLINE_CONTRAST_THRESHOLD,d as COLOR_PALETTE,br as COLOR_VOICE_CALL,Er as COLOR_WHITE,tr as CURSOR_TYPE,lr as DARK_THEME_FILTER,no as DEFAULT_ADAPTIVE_RADIUS,Cn as DEFAULT_CANVAS_BACKGROUND_PICKS,wn as DEFAULT_CHART_COLOR_INDEX,mr as DEFAULT_COLLISION_THRESHOLD,D as DEFAULT_ELEMENT_BACKGROUND_COLOR_INDEX,Dn as DEFAULT_ELEMENT_BACKGROUND_COLOR_PALETTE,In as DEFAULT_ELEMENT_BACKGROUND_PICKS,ao as DEFAULT_ELEMENT_PROPS,P as DEFAULT_ELEMENT_STROKE_COLOR_INDEX,Pn as DEFAULT_ELEMENT_STROKE_COLOR_PALETTE,Fn as DEFAULT_ELEMENT_STROKE_PICKS,kt as DEFAULT_ELEMENT_STROKE_WIDTH_KEY,Wr as DEFAULT_EXPORT_PADDING,fo as DEFAULT_FILENAME,dr as DEFAULT_FONT_FAMILY,pr as DEFAULT_FONT_SIZE,_r as DEFAULT_GRID_SIZE,xr as DEFAULT_GRID_STEP,Vr as DEFAULT_IMAGE_OPTIONS,er as DEFAULT_LASER_COLOR,to as DEFAULT_PROPORTIONAL_RADIUS,To as DEFAULT_REDUCED_GLOBAL_ALPHA,lo as DEFAULT_SIDEBAR,vo as DEFAULT_STROKE_STREAMLINE,So as DEFAULT_STROKE_STREAMLINE_PRECISE,fr as DEFAULT_TEXT_ALIGN,wt as DEFAULT_TRANSFORM_HANDLE_SPACING,Gr as DEFAULT_UI_OPTIONS,Te as DEFAULT_VERSION,hr as DEFAULT_VERTICAL_ALIGN,xo as DOUBLE_TAP_POSITION_THRESHOLD,zn as DRAGGING_THRESHOLD,X as Debug,po as EDITOR_LS_KEYS,bo as ELEMENT_LINK_KEY,eo as ELEMENT_READY_TO_ERASE_OPACITY,qn as ELEMENT_SHIFT_TRANSLATE_AMOUNT,Zn as ELEMENT_TRANSLATE_AMOUNT,zr as ENCRYPTION_KEY_BITS,k as ENV,It as EPSILON,Rt as EVENT,vr as EXPORT_DATA_TYPES,yr as EXPORT_IMAGE_TYPES,Kr as EXPORT_SCALES,G as Emitter,T as FONT_FAMILY,W as FONT_FAMILY_FALLBACKS,Lt as FONT_FAMILY_GENERIC_FALLBACKS,U as FONT_METADATA,ar as FONT_SIZES,cr as FRAME_STYLE,Dt as FREEDRAW_STROKE_WIDTH,Oo as GOOGLE_FONTS_RANGES,Dr as HYPERLINK_TOOLTIP_DELAY,kr as IDLE_THRESHOLD,be as IMAGE_MIME_TYPES,Mr as IMAGE_RENDER_TIMEOUT,S as KEYS,Vt as KeyCodeMap,co as LIBRARY_DISABLED_TYPES,Ut as LIBRARY_SIDEBAR_TAB,jn as LINE_CONFIRM_THRESHOLD,_o as LINE_POLYGON_POINT_MERGE_DISTANCE,wo as LOCAL_FONT_PROTOCOL,Ln as MAX_CUSTOM_COLORS_USED_IN_CANVAS,Br as MAX_DECIMALS_FOR_SVG_EXPORT,Pr as MAX_ZOOM,de as MIME_TYPES,Xn as MINIMUM_ARROW_SIZE,ur as MIN_FONT_SIZE,mo as MIN_WIDTH_OR_HEIGHT,Cr as MIN_ZOOM,yo as MOBILE_ACTION_BUTTON_BG,me as MONOSPACE_GENERIC_FONT,Go as MQ_MAX_HEIGHT_LANDSCAPE,No as MQ_MAX_MOBILE,Ko as MQ_MAX_TABLET,Ho as MQ_MAX_WIDTH_LANDSCAPE,Bo as MQ_MIN_TABLET,Wo as MQ_MIN_WIDTH_DESKTOP,Vo as MQ_RIGHT_SIDEBAR_MIN_WIDTH,go as ORIG_ID,nr as POINTER_BUTTON,rr as POINTER_EVENTS,we as PromisePool,_e as Queue,Pt as ROUGHNESS,ro as ROUNDNESS,he as SANS_SERIF_GENERIC_FONT,Fr as SCROLL_TIMEOUT,Jn as SHIFT_LOCKING_ANGLE,Ft as SIDE_RESIZING_THRESHOLD,ho as STATS_PANELS,Ct as STRING_MIME_TYPES,ge as STROKE_WIDTH,oo as STROKE_WIDTH_KEYS,$r as SVG_DOCUMENT_PREAMBLE,Yr as SVG_NS,Rr as TAP_TWICE_TIMEOUT,Jr as TEXT_ALIGN,$n as TEXT_AUTOWRAP_THRESHOLD,Qn as TEXT_TO_CENTER_SNAP_THRESHOLD,ir as THEME,Or as TITLE_TIMEOUT,uo as TOOL_TYPE,Lr as TOUCH_CTX_MENU_TIMEOUT,Hr as URL_HASH_KEYS,Nr as URL_QUERY_KEYS,Nt as UserIdleState,Xr as VERSIONS,wr as VERSION_TIMEOUT,Qr as VERTICAL_ALIGN,Ke as VersionedSnapshotStore,L as WINDOWS_EMOJI_FALLBACK_FONT,or as YOUTUBE_STATES,Ir as ZOOM_STEP,Ia as addEventListener,zs as allowFullScreen,Rn as applyDarkModeFilter,ma as arrayToList,da as arrayToMap,fa as arrayToMapWithIndex,ha as arrayToObject,Ma as assertNever,ua as bytesToHexString,Fs as capitalizeString,Na as castArray,Gs as chunk,wa as cloneJSON,Un as colorToHex,Sa as composeEventHandlers,Zo as createUserAgentDescriptor,Us as debounce,qo as deriveStylesPanelMode,Ws as distance,Hs as easeOut,De as escapeDoubleQuotes,Xs as exitFullScreen,ta as findIndex,na as findLastIndex,la as focusNearestParent,kn as getAllColorsSpecificShade,ws as getDateTime,Sr as getExportSource,Ga as getFeatureFlag,Ee as getFontFamilyFallbacks,Xt as getFontFamilyString,Ds as getFontString,jo as getFormFactor,Jt as getFrame,Ot as getGenericFontFamilyFallback,Zs as getGlobalCSSVariable,fs as getGridPoint,Io as getLineHeight,ia as getNearestScrollableContainer,ps as getSizeFromPoints,so as getStrokeWidthByKey,Ca as getSvgPathFromStroke,pa as getUpdatedTimestamp,sa as getVersion,Fo as getVerticalOffset,Ra as invariant,Se as isAndroid,ka as isAnyTrue,os as isArrowKey,gn as isBounds,Xo as isBrave,Ht as isChrome,Hn as isColorDark,ve as isDarwin,Ta as isDevEnv,$o as isFirefox,$s as isFullScreen,Me as isIOS,zt as isInputLike,Cs as isInteractive,Yt as isLatinChar,ni as isLocalLink,Oa as isMemberOf,Gt as isMobileBreakpoint,xa as isPrimitive,Pe as isProdEnv,ya as isPromiseLike,Qs as isRTL,tn as isReadonlyArray,Aa as isRunningInIframe,zo as isSafari,Vs as isSelectionLikeTool,ba as isServerEnv,en as isShallowEqual,Bt as isTabletBreakpoint,z as isTestEnv,Is as isToolIcon,pe as isTransparent,Yo as isWindows,Ps as isWritableElement,Qo as loadDesktopUIModePreference,ra as mapFind,rs as matchKey,La as memoize,ea as muteFSAbortError,oa as nFormatter,ks as nextAnimationFrame,Pa as normalizeEOL,Gn as normalizeInputColor,fn as normalizeLink,Ka as oneOf,ca as preventUnload,Ae as promiseTry,va as queryFocusableElements,qa as randomId,Xa as randomInteger,Ha as reduceToCommonValue,Ks as removeSelection,ds as rescalePoints,ja as reseed,xe as resolvablePromise,ue as rgbToHex,Ua as safelyParseJSON,qs as sceneCoordsToViewportCoords,Bs as selectNode,Os as setDateTimeForTests,Jo as setDesktopUIMode,Ba as setFeatureFlag,as as shouldMaintainAspectRatio,ss as shouldResizeFromCenter,is as shouldRotateWithDiscreteAngle,nn as sizeOf,aa as supportsEmoji,Vn as supportsResizeObserver,Ns as throttleRAF,Ea as toArray,Da as toBrandedType,Qt as toIterable,ri as toValidURL,Js as tupleToCoors,Ys as updateActiveTool,_a as updateObject,Fa as updateStable,js as viewportCoordsToSceneCoords,ga as wrapEvent};
|
|
3
|
+
`,Ao=128,yo={excalidraw:2,excalidrawLibrary:2},vo=5,So=.7,Mo=11,Ro={TOP:"top",MIDDLE:"middle",BOTTOM:"bottom"},Oo={LEFT:"left",CENTER:"center",RIGHT:"right"},Lo=20,Io=70,wo=.25,Fo=32,Co={LEGACY:1,PROPORTIONAL_RADIUS:2,ADAPTIVE_RADIUS:3},Wt={architect:0,artist:1,cartoonist:2},Po=["thin","medium","bold"],ve={thin:1,medium:2,bold:4,extraBold:8},Yt={thin:.5,medium:1,bold:2,extraBold:4},Do=(e,t)=>e==="freedraw"?Yt[t]:ve[t],Vt="medium",No={strokeColor:d.black,backgroundColor:d.transparent,fillStyle:"solid",strokeWidth:ve[Vt],strokeStyle:"solid",roughness:Wt.artist,opacity:100,locked:!1},zt="library",ko="search",Uo={name:"default",defaultTab:zt},Ho=new Set(["iframe","embeddable","image"]),Ko={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",stickynote:"stickynote",embeddable:"embeddable",laser:"laser",autoshape:"autoshape",bucketfill:"bucketfill"},Go={OAI_API_KEY:"excalidraw-oai-api-key",MERMAID_TO_EXCALIDRAW:"mermaid-to-excalidraw",PUBLISH_LIBRARY:"publish-library-data"},Bo="Untitled",Wo={generalStats:1,elementProperties:2},Yo=1,Vo={sharp:"sharp",round:"round",elbow:"elbow"},zo=.3,$o="element",Xo=Symbol.for("__test__originalId__"),$t=(r=>(r.ACTIVE="active",r.AWAY="away",r.IDLE="idle",r))($t||{}),jo=20,qo=35,Zo=700,Qo={background:"var(--mobile-action-button-bg)"},Jo=.5,es=.2;p();var U={[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},[z.Xiaolai]:{metrics:{unitsPerEm:1e3,ascender:880,descender:-144,lineHeight:1.25},fallback:!0},[z["Segoe UI Emoji"]]:{metrics:{unitsPerEm:1e3,ascender:886,descender:-374,lineHeight:1.25},local:!0,fallback:!0}},ss={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"},as="local:",is=(e,t,n)=>{let{unitsPerEm:r,ascender:o,descender:s}=U[e]?.metrics||U[T.Excalifont].metrics,i=t/r,a=(n-i*o+i*s)/2;return i*o+a},ls=e=>{let{lineHeight:t}=U[e]?.metrics||U[T.Excalifont].metrics;return t};p();var Se=class{jobs=[];running=!1;tick(){if(this.running)return;let t=this.jobs.shift();t?(this.running=!0,t.promise.resolve(Re(t.jobFactory,...t.args).finally(()=>{this.running=!1,this.tick()}))):this.running=!1}push(t,...n){let r=Me();return this.jobs.push({jobFactory:t,promise:r,args:n}),this.tick(),r}};p();p();var Oe="excalidraw.desktopUIMode",hs=599,ms=1e3,Es=500,Ts=600,bs=1180,gs=1440,_s=1229,Le=/Mac|iPod|iPhone|iPad/.test(navigator.platform),xs=/^Win/.test(navigator.platform),Ie=/\b(android)\b/i.test(navigator.userAgent),As=typeof window<"u"&&"netscape"in window&&navigator.userAgent.indexOf("rv:")>1&&navigator.userAgent.indexOf("Gecko")>1,Xt=navigator.userAgent.indexOf("Chrome")!==-1,ys=!Xt&&navigator.userAgent.indexOf("Safari")!==-1,we=/iPad|iPhone/i.test(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document,vs=()=>navigator.brave?.isBrave?.name==="isBrave",jt=(e,t)=>e<=599||t<500&&e<1e3,qt=(e,t)=>{let n=Math.min(e,t),r=Math.max(e,t);return n>=600&&r<=1180},Zt=()=>{let e=navigator.userAgent||"",t=navigator.platform||"",n=navigator.userAgentData;if(n){let o=(n.platform||"").toLowerCase(),s=o==="windows"||o==="macos"||o==="linux"||o==="chrome os";if(n.mobile===!0)return!0;if(n.mobile===!1&&o==="android")return matchMedia?.("(hover: none)").matches&&matchMedia?.("(pointer: coarse)").matches;if(s)return!1}if(we)return!0;if(Ie){let o=/Mobile/i.test(e);if(o||!o)return matchMedia?.("(hover: none)").matches&&matchMedia?.("(pointer: coarse)").matches}return/Win|Linux|CrOS|Mac/.test(t)||/Windows NT|X11|CrOS|Macintosh/.test(e),!1},Ss=(e,t)=>jt(e,t)?"phone":qt(e,t)?"tablet":"desktop",Ms=e=>e.formFactor==="phone"?"mobile":e.formFactor==="tablet"?"compact":e.desktopUIMode,Rs=e=>{let t=e??"",n="unknown";return we?n="ios":Ie?n="android":t&&(n="other"),{isMobileDevice:Zt(),platform:n}},Os=()=>{if(typeof window>"u")return null;try{let e=window.localStorage.getItem(Oe);if(e==="compact"||e==="full")return e}catch{}return null},Qt=e=>{if(!(typeof window>"u"))try{window.localStorage.setItem(Oe,e)}catch{}},Ls=e=>{if(!(e!=="compact"&&e!=="full"))return Qt(e),e};var Fe={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"},M={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:Le?"metaKey":"ctrlKey",DELETE:"Delete",ENTER:"Enter",ESCAPE:"Escape",QUESTION_MARK:"?",SPACE:" ",TAB:"Tab",CHEVRON_LEFT:"<",CHEVRON_RIGHT:">",PERIOD:".",COMMA:",",SUBTRACT:"-",SLASH:"/",A:"a",B:"b",C:"c",D:"d",E:"e",F:"f",G:"g",H:"h",I:"i",L:"l",N:"n",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"},Jt=new Map([[M.Z,Fe.Z],[M.Y,Fe.Y]]),en=e=>/^[a-z]$/.test(e.toLowerCase()),Cs=(e,t)=>{if(t===e.key.toLowerCase())return!0;let n=Jt.get(t);return!!(n&&!en(e.key)&&e.code===n)},Ps=e=>e===M.ARROW_LEFT||e===M.ARROW_RIGHT||e===M.ARROW_DOWN||e===M.ARROW_UP,Ds=e=>e.altKey,Ns=e=>e.shiftKey,ks=e=>e.shiftKey;p();import{pointFrom as Ce,pointFromPair as tn}from"@excalidraw/math";var Gs=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)}},Bs=(e,t,n,r)=>{let o=n.map(y=>y[e]),s=Math.max(...o),i=Math.min(...o),a=s-i,l=a===0?1:t/a,u=1/0,m=n.map(y=>{let S=y[e]*l,F=[...y];return F[e]=S,S<u&&(u=S),F});if(!r||m.length===2)return m;let b=i-u;return m.map(y=>tn(y.map((S,F)=>F===e?S+b:S)))},Ws=(e,t,n)=>n?Ce(Math.round(e/n)*n,Math.round(t/n)*n):Ce(e,t);p();var ke=te(De(),1),Ne=class{pool;entries={};constructor(t,n){this.pool=new ke.default(t,n)}all(){let t=n=>{if(n.data.result){let[r,o]=n.data.result;this.entries[r]=o}};return this.pool.addEventListener("fulfilled",t),this.pool.start().then(()=>(setTimeout(()=>{this.pool.removeEventListener("fulfilled",t)}),Object.values(this.entries)))}};p();p();p();var Ue=(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),"");p();var I=class{constructor(t){this.seed=t}next(){return this.seed?(2**31-1&(this.seed=Math.imul(48271,this.seed)))/2**31:Math.random()}};p();import{average as H}from"@excalidraw/math";var X=null,sa=e=>{X=e},aa=()=>{if(X)return X;let e=new Date,t=e.getFullYear(),n=`${e.getMonth()+1}`.padStart(2,"0"),r=`${e.getDate()}`.padStart(2,"0"),o=`${e.getHours()}`.padStart(2,"0"),s=`${e.getMinutes()}`.padStart(2,"0");return`${t}-${n}-${r}-${o}${s}`},ia=e=>e.charAt(0).toUpperCase()+e.slice(1),K=e=>e?.ownerDocument?.defaultView??(typeof window>"u"?null:window),la=e=>{let t=K(e);return!!t&&e instanceof t.HTMLElement&&e.className.includes("ToolIcon")},nn=e=>{let t=K(e);return!!t&&(e instanceof t.HTMLElement&&e.dataset.type==="wysiwyg"||e instanceof t.HTMLBRElement||e instanceof t.HTMLInputElement||e instanceof t.HTMLTextAreaElement||e instanceof t.HTMLSelectElement)},ca=e=>{let t=K(e);return nn(e)||!!t&&e instanceof t.Element&&!!e.closest("label, button")},ua=e=>{let t=K(e);return!!t&&(e instanceof t.HTMLElement&&e.dataset.type==="wysiwyg"||e instanceof t.HTMLBRElement||e instanceof t.HTMLTextAreaElement||e instanceof t.HTMLInputElement&&(e.type==="text"||e.type==="number"||e.type==="password"||e.type==="search")||e instanceof t.HTMLElement&&e.closest(".cm-editor")!==null)},rn=({fontFamily:e})=>{for(let[t,n]of Object.entries(T))if(n===e)return`${t}${xe(n).map(r=>`, ${r}`).join("")}`;return L},pa=({fontSize:e,fontFamily:t})=>`${e}px ${rn({fontFamily:t})}`,da=async e=>{requestAnimationFrame(()=>requestAnimationFrame(e))},fa=(e,t)=>{let n=0,r=null,o=(...s)=>{r=s,clearTimeout(n),n=window.setTimeout(()=>{r=null,e(...s)},t)};return o.flush=()=>{if(clearTimeout(n),r){let s=r;r=null,e(...s)}},o.cancel=()=>{r=null,clearTimeout(n)},o},ha=e=>{let t=null,n=null,r=()=>{t=window.requestAnimationFrame(()=>{t=null;let s=n;n=null,s&&e(...s)})},o=(...s)=>{n=s,t===null&&r()};return o.flush=()=>{t!==null&&(cancelAnimationFrame(t),t=null),n&&(e(...n),n=null)},o.cancel=()=>{n=null,t!==null&&(cancelAnimationFrame(t),t=null)},o},ma=e=>1-Math.pow(1-e,4),Ea=(e,t)=>{if(!e.length||t<1)return[];let n=0,r=0,o=Array(Math.ceil(e.length/t));for(;n<e.length;)o[r++]=e.slice(n,n+=t);return o},Ta=e=>{let t=window.getSelection();if(t){let n=document.createRange();n.selectNodeContents(e),t.removeAllRanges(),t.addRange(n)}},ba=()=>{let e=window.getSelection();e&&e.removeAllRanges()},ga=(e,t)=>Math.abs(e-t),_a=e=>e==="selection"||e==="lasso",xa=(e,t)=>t.type==="custom"?{...e.activeTool,type:"custom",customType:t.customType,locked:t.locked??e.activeTool.locked}:{...e.activeTool,lastActiveTool:t.lastActiveTool===void 0?e.activeTool.lastActiveTool:t.lastActiveTool,type:t.type,customType:null,locked:t.locked??e.activeTool.locked,fromSelection:t.fromSelection??!1},Aa=()=>document.fullscreenElement?.nodeName==="HTML",ya=()=>document.documentElement.requestFullscreen(),va=()=>document.exitFullscreen(),Sa=({clientX:e,clientY:t},{zoom:n,offsetLeft:r,offsetTop:o,scrollX:s,scrollY:i})=>{let a=(e-r)/n.value-s,l=(t-o)/n.value-i;return{x:a,y:l}},Ma=({sceneX:e,sceneY:t},{zoom:n,offsetLeft:r,offsetTop:o,scrollX:s,scrollY:i})=>{let a=(e+s)*n.value+r,l=(t+i)*n.value+o;return{x:a,y:l}},Ra=e=>getComputedStyle(document.documentElement).getPropertyValue(`--${e}`),on="A-Za-z\xC0-\xD6\xD8-\xF6\xF8-\u02B8\u0300-\u0590\u0800-\u1FFF\u2C00-\uFB1C\uFDFE-\uFE6F\uFEFD-\uFFFF",sn="\u0591-\u07FF\uFB1D-\uFDFD\uFE70-\uFEFC",an=new RegExp(`^[^${on}]*[${sn}]`),Oa=e=>an.test(e),La=e=>{let[t,n]=e;return{x:t,y:n}},Ia=e=>{if(e?.name==="AbortError"){console.warn(e);return}throw e},wa=(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},Fa=(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},Ca=(e,t)=>{for(let n=0;n<e.length;n++){let r=t(e[n],n);if(r!=null)return r}},Me=()=>{let e,t,n=new Promise((r,o)=>{e=r,t=o});return n.resolve=e,n.reject=t,n},Pa=(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+$/,o;for(o=n.length-1;o>0&&!(e>=n[o].value);o--);return(e/n[o].value).toFixed(t).replace(r,"$1")+n[o].symbol},Da=()=>document.querySelector('meta[name="version"]')?.content||Ae,Na=()=>{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},ka=e=>{let t=e.ownerDocument,n=t.defaultView??window,r=e.parentElement;for(;r;){if(r===t.body)return t;let{overflowY:o}=n.getComputedStyle(r);if(r.scrollHeight>r.clientHeight&&(o==="auto"||o==="scroll"||o==="overlay"))return r;r=r.parentElement}return t},Ua=e=>{let t=e.parentElement;for(;t;){if(t.tabIndex>-1){t.focus();return}t=t.parentElement}},Ha=e=>{e.preventDefault(),e.returnValue=""},Ka=e=>Array.from(e).map(t=>`0${t.toString(16)}`.slice(-2)).join(""),Ga=()=>q()?1:Date.now(),Ba=e=>e instanceof Map?e:e.reduce((t,n)=>(t.set(typeof n=="string"?n:n.id,n),t),new Map),Wa=e=>e.reduce((t,n,r)=>(t.set(n.id,[n,r]),t),new Map),Ya=(e,t)=>e.reduce((n,r,o)=>(n[t?t(r):o]=r,n),{}),Va=e=>e.reduce((t,n,r)=>{let o={...n,prev:null,next:null};if(r!==0){let s=t[r-1];if(o.prev=s,s.next=o,r===e.length-1){let i=t[0];o.next=i,i.prev=o}}return t.push(o),t},[]),ln=e=>Array.isArray(e)?e:e.values(),za=e=>Array.isArray(e)?e:Array.from(ln(e)),q=()=>h.MODE===k.TEST,$a=()=>h.MODE===k.DEVELOPMENT,Ke=()=>h.MODE===k.PRODUCTION,Xa=()=>typeof process<"u"&&!0,ja=(e,t)=>new CustomEvent(e,{detail:{nativeEvent:t},cancelable:!0}),qa=(e,t)=>{let n=!1;for(let r in t){let o=t[r];if(typeof o<"u"){if(e[r]===o&&(typeof o!="object"||o===null))continue;n=!0}}return n?{...e,...t}:e},Za=e=>{let t=typeof e;return e==null||t!=="object"&&t!=="function"},cn=()=>{try{return window.self===window.top?"top":"iframe"}catch{return"iframe"}},Qa=()=>cn()==="iframe",Ja=e=>!!e&&typeof e=="object"&&"then"in e&&"catch"in e&&"finally"in e,ei=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):[]},He=(e,t)=>Array.isArray(e)&&Array.isArray(t)&&e.length===0&&t.length===0?!0:e===t,un=(e,t,n,r=!1)=>{let o=Object.keys(e),s=Object.keys(t);if(o.length!==s.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]||He(e[i],t[i])))return r&&console.warn(`%cisShallowEqual: ${i} not equal ->`,"color: #8B4000",e[i],t[i]),!1;return!0}return o.every(i=>{let a=n?.[i],l=a?a(e[i],t[i]):e[i]===t[i]||He(e[i],t[i]);return!l&&r&&console.warn(`%cisShallowEqual: ${i} not equal ->`,"color: #8B4000",e[i],t[i]),l})},ti=(e,t,{checkForDefaultPrevented:n=!0}={})=>function(o){if(e?.(o),!n||!o?.defaultPrevented)return t?.(o)},ni=(e,t,n)=>{if(!t)return e;if(n)return console.error(t),e;throw new Error(t)};function ri(e,t){if(!e)throw new Error(t)}var oi=e=>{let t,n,r=function(o){let s=Object.entries(o);if(t){let a=!0;for(let[l,u]of s)if(t.get(l)!==u){a=!1;break}if(a)return n}let i=e(o);return t=new Map(s),n=i,i};return r.clear=()=>{t=void 0,n=void 0},r},si=(e,t)=>e instanceof Set||e instanceof Map?e.has(t):"includes"in e?e.includes(t):e.hasOwnProperty(t),ai=e=>JSON.parse(JSON.stringify(e)),ii=(e,t)=>un(e,t)?e:t;function li(e,t,n,r){return e?(e?.addEventListener?.(t,n,r),()=>{e?.removeEventListener?.(t,n,r)}):()=>{}}function ci(e,t=!0){let n=e.length;if(n<4)return"";let r=e[0],o=e[1],s=e[2],i=`M${r[0].toFixed(2)},${r[1].toFixed(2)} Q${o[0].toFixed(2)},${o[1].toFixed(2)} ${H(o[0],s[0]).toFixed(2)},${H(o[1],s[1]).toFixed(2)} T`;for(let a=2,l=n-1;a<l;a++)r=e[a],o=e[a+1],i+=`${H(r[0],o[0]).toFixed(2)},${H(r[1],o[1]).toFixed(2)} `;return t&&(i+="Z"),i}var ui=e=>e.replace(/\r?\n|\r/g,`
|
|
4
|
+
`);function pi(e){return e}var Re=async(e,...t)=>new Promise(n=>{n(e(...t))}),di=(...e)=>Math.max(...e.map(t=>t?1:0))>0,fi=e=>{try{return JSON.parse(e)}catch{return null}},Ge=e=>e.replace(/"/g,"""),hi=e=>Array.isArray(e)?e:[e],pn=e=>Array.isArray(e),dn=e=>pn(e)?e.length:e instanceof Map||e instanceof Set?e.size:Object.keys(e).length,mi=(e,t)=>{if(dn(e)===0)return null;let n=t||(o=>o),r=null;for(let o of e){let s=n(o);if((r===null||r===s)&&s!=null)r=s;else return null}return r},Be="excalidraw-feature-flags",j={COMPLEX_BINDINGS:!1},R=null,Ei=e=>{if(!R)try{let t=localStorage.getItem(Be);t&&(R=JSON.parse(t)??j)}catch{}return(R||j)[e]},Ti=(e,t)=>{try{R={...R||j,[e]:t},localStorage.setItem(Be,JSON.stringify(R))}catch(n){console.error("unable to set feature flag",n)}},bi=(e,t)=>t.includes(e);var We=new I(Date.now()),Ye=0,vi=()=>Math.floor(We.next()*2**31),Si=e=>{We=new I(e),Ye=0},Mi=()=>q()?`id${Ye++}`:Ue(),Ri=e=>{let t=e>>>0;return()=>{t+=1831565813;let n=t;return n=Math.imul(n^n>>>15,n|1),n^=n+Math.imul(n^n>>>7,n|61),((n^n>>>14)>>>0)/4294967296}};p();var ze=te(Ve(),1);var An=e=>(e=e.trim(),e&&(0,ze.sanitizeUrl)(Ge(e))),Ci=e=>!!(e?.includes(location.origin)||e?.startsWith("/")),Pi=e=>{if(e=An(e),e.startsWith("/"))return`${location.origin}${e}`;try{new URL(e)}catch{return"about:blank"}return e};p();var B=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(o=>typeof o=="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=[]}};p();var $e=class{constructor(t){this.behavior=t}emitters=new Map;lastPayload=new Map;emittedOnce=new Set;getEmitter(t){let n=this.emitters.get(t);return n||(n=new B,this.emitters.set(t,n)),n}toPromiseValue(t){return t.length===1?t[0]:t}on(t,n){let r=this.behavior[t],o=this.lastPayload.get(t);if(n)return r.replay==="last"&&o&&(queueMicrotask(()=>n(...o)),r.cardinality==="once")?()=>{}:this.getEmitter(t).on(n);if(r.cardinality!=="once"||r.replay!=="last")throw new Error(`Event "${String(t)}" requires a callback`);return o?Promise.resolve(this.toPromiseValue(o)):new Promise(s=>{this.getEmitter(t).once((...i)=>{s(this.toPromiseValue(i))})})}emit(t,...n){let r=this.behavior[t];if(!Ke()&&r.cardinality==="once"){if(this.emittedOnce.has(t))throw new Error(`Event "${String(t)}" can only be emitted once`);this.emittedOnce.add(t)}r.replay==="last"&&this.lastPayload.set(t,n);try{this.getEmitter(t).trigger(...n)}finally{r.cardinality==="once"&&this.getEmitter(t).clear()}}clear(){this.lastPayload.clear(),this.emittedOnce.clear();for(let t of this.emitters.values())t.clear();this.emitters.clear()}};p();var Xe=class{constructor(t,n=Object.is){this.isEqual=n;this.value=t}version=0;value;waiters=new Set;subscribers=new Set;getSnapshot(){return{version:this.version,value:this.value}}set(t){if(this.isEqual(this.value,t))return!1;this.value=t,this.version+=1;let n=this.getSnapshot();for(let r of this.subscribers)r(n);for(let r of this.waiters)r(n);return this.waiters.clear(),!0}update(t){return this.set(t(this.value))}subscribe(t){return this.subscribers.add(t),()=>{this.subscribers.delete(t)}}pull(t=-1){return this.version!==t?Promise.resolve(this.getSnapshot()):new Promise(n=>{this.waiters.add(n)})}};p();var w=(e,t=5)=>parseFloat(e.toPrecision(t)),yn=e=>w(e.reduce((t,n)=>t+n)/e.length),Z=class e{static DEBUG_LOG_TIMES=!0;static TIMES_AGGR={};static TIMES_AVG={};static LAST_DEBUG_LOG_CALL=0;static DEBUG_LOG_INTERVAL_ID=null;static LAST_FRAME_TIMESTAMP=0;static FRAME_COUNT=0;static ANIMATION_FRAME_ID=null;static scheduleAnimationFrame=()=>{e.DEBUG_LOG_INTERVAL_ID!==null&&(e.ANIMATION_FRAME_ID=requestAnimationFrame(t=>{e.LAST_FRAME_TIMESTAMP!==t&&(e.LAST_FRAME_TIMESTAMP=t,e.FRAME_COUNT++),e.DEBUG_LOG_INTERVAL_ID!==null&&e.scheduleAnimationFrame()}))};static setupInterval=()=>{e.DEBUG_LOG_INTERVAL_ID===null&&(console.info("%c(starting perf recording)","color: lime"),e.DEBUG_LOG_INTERVAL_ID=window.setInterval(e.debugLogger,1e3),e.scheduleAnimationFrame()),e.LAST_DEBUG_LOG_CALL=Date.now()};static debugLogger=()=>{if(e.DEBUG_LOG_TIMES){for(let[t,{t:n,times:r}]of Object.entries(e.TIMES_AGGR))r.length&&(console.info(t,w(r.reduce((o,s)=>o+s)),r.sort((o,s)=>o-s).map(o=>w(o))),e.TIMES_AGGR[t]={t:n,times:[]});for(let[t,{t:n,times:r,avg:o}]of Object.entries(e.TIMES_AVG))if(r.length){let s=r.reduce((a,l)=>a+l),i=w(s/e.FRAME_COUNT);console.info(t,`- ${r.length} calls - ${i}ms/frame across ${e.FRAME_COUNT} frames (${w(i/16.67*100,1)}% of frame budget)`),e.TIMES_AVG[t]={t:n,times:[],avg:o!=null?yn([o,i]):i}}}e.FRAME_COUNT=0,Date.now()-e.LAST_DEBUG_LOG_CALL>600&&e.DEBUG_LOG_INTERVAL_ID!==null&&(console.info("%c(stopping perf recording)","color: red"),window.clearInterval(e.DEBUG_LOG_INTERVAL_ID),window.cancelAnimationFrame(e.ANIMATION_FRAME_ID),e.ANIMATION_FRAME_ID=null,e.FRAME_COUNT=0,e.LAST_FRAME_TIMESTAMP=0,e.DEBUG_LOG_INTERVAL_ID=null,e.TIMES_AGGR={},e.TIMES_AVG={})};static logTime=(t,n="default")=>{e.setupInterval();let r=performance.now(),{t:o,times:s}=e.TIMES_AGGR[n]=e.TIMES_AGGR[n]||{t:0,times:[]};o&&s.push(t??r-o),e.TIMES_AGGR[n].t=r};static logTimeAverage=(t,n="default")=>{e.setupInterval();let r=performance.now(),{t:o,times:s}=e.TIMES_AVG[n]=e.TIMES_AVG[n]||{t:0,times:[]};o&&s.push(t??r-o),e.TIMES_AVG[n].t=r};static logWrapper=t=>(n,r="default")=>(...o)=>{let s=performance.now(),i=n(...o);return e[t](performance.now()-s,r),i};static logTimeWrap=e.logWrapper("logTime");static logTimeAverageWrap=e.logWrapper("logTimeAverage");static perfWrap=(t,n="default")=>(...r)=>{console.time(n);let o=t(...r);return console.timeEnd(n),o};static CHANGED_CACHE={};static logChanged(t,n){let r=e.CHANGED_CACHE[t];if(e.CHANGED_CACHE[t]=n,!r)return;let o=new Set([...Object.keys(r),...Object.keys(n)]),s={};for(let i of o){let a=r[i],l=n[i];je(a,l)||(s[i]={prev:a,next:l})}Object.keys(s).length>0&&console.info(`[${t}] changed:`,s)}};function je(e,t){if(Object.is(e,t))return!0;if(e===null||t===null||typeof e!="object"||typeof t!="object"||Array.isArray(e)!==Array.isArray(t))return!1;let n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(let o of n)if(!je(e[o],t[o]))return!1;return!0}export{po as ACTIVE_THRESHOLD,jr as ALLOWED_PASTE_MIME_TYPES,ar as APP_NAME,Mo as ARROW_LABEL_FONT_SIZE_TO_MIN_WIDTH_RATIO,So as ARROW_LABEL_WIDTH_FRACTION,Vo as ARROW_TYPE,$e as AppEventBus,Zo as BIND_MODE_TIMEOUT,vo as BOUND_TEXT_PADDING,Wn as BUCKET_FILL_BACKGROUND_PICKS,ne as BinaryHeap,zr as CANVAS_ONLY_ACTIONS,ko as CANVAS_SEARCH_TAB,be as CJK_HAND_DRAWN_FALLBACK_FONT,_r as CLASSES,Fe as CODES,Hn as COLORS_PER_ROW,Yr as COLOR_CHARCOAL_BLACK,Jn as COLOR_OUTLINE_CONTRAST_THRESHOLD,d as COLOR_PALETTE,Gn as COLOR_TOP_PICKS_SLOTS,Vr as COLOR_VOICE_CALL,Wr as COLOR_WHITE,Er as CURSOR_TYPE,yr as DARK_THEME_FILTER,Fo as DEFAULT_ADAPTIVE_RADIUS,zn as DEFAULT_CANVAS_BACKGROUND_PICKS,Kn as DEFAULT_CHART_COLOR_INDEX,Br as DEFAULT_COLLISION_THRESHOLD,v as DEFAULT_ELEMENT_BACKGROUND_COLOR_INDEX,Xn as DEFAULT_ELEMENT_BACKGROUND_COLOR_PALETTE,Bn as DEFAULT_ELEMENT_BACKGROUND_PICKS,No as DEFAULT_ELEMENT_PROPS,D as DEFAULT_ELEMENT_STROKE_COLOR_INDEX,$n as DEFAULT_ELEMENT_STROKE_COLOR_PALETTE,Ft as DEFAULT_ELEMENT_STROKE_PICKS,Vt as DEFAULT_ELEMENT_STROKE_WIDTH_KEY,bo as DEFAULT_EXPORT_PADDING,Bo as DEFAULT_FILENAME,Ur as DEFAULT_FONT_FAMILY,Mr as DEFAULT_FONT_SIZE,$r as DEFAULT_GRID_SIZE,Xr as DEFAULT_GRID_STEP,go as DEFAULT_IMAGE_OPTIONS,mr as DEFAULT_LASER_COLOR,wo as DEFAULT_PROPORTIONAL_RADIUS,zo as DEFAULT_REDUCED_GLOBAL_ALPHA,Uo as DEFAULT_SIDEBAR,me as DEFAULT_STICKY_NOTE_BG,Fr as DEFAULT_STICKY_NOTE_SIZE,Jo as DEFAULT_STROKE_STREAMLINE,es as DEFAULT_STROKE_STREAMLINE_PRECISE,Kr as DEFAULT_TEXT_ALIGN,Ht as DEFAULT_TRANSFORM_HANDLE_SPACING,mo as DEFAULT_UI_OPTIONS,Ae as DEFAULT_VERSION,Gr as DEFAULT_VERTICAL_ALIGN,lo as DEFAULT_ZOOM,qo as DOUBLE_TAP_POSITION_THRESHOLD,lr as DRAGGING_THRESHOLD,Z as Debug,Go as EDITOR_LS_KEYS,$o as ELEMENT_LINK_KEY,Io as ELEMENT_PENDING_DRAW_SHAPE_OPACITY,Lo as ELEMENT_READY_TO_ERASE_OPACITY,pr as ELEMENT_SHIFT_TRANSLATE_AMOUNT,dr as ELEMENT_TRANSLATE_AMOUNT,Ao as ENCRYPTION_KEY_BITS,k as ENV,Gt as EPSILON,Pt as EVENT,Zr as EXPORT_DATA_TYPES,qr as EXPORT_IMAGE_TYPES,To as EXPORT_SCALES,B as Emitter,T as FONT_FAMILY,z as FONT_FAMILY_FALLBACKS,Dt as FONT_FAMILY_GENERIC_FALLBACKS,U as FONT_METADATA,xr as FONT_SIZES,Hr as FONT_TOP_PICKS_SLOTS,vr as FRAME_STYLE,Yt as FREEDRAW_STROKE_WIDTH,ss as GOOGLE_FONTS_RANGES,co as HYPERLINK_TOOLTIP_DELAY,uo as IDLE_THRESHOLD,ye as IMAGE_MIME_TYPES,Jr as IMAGE_RENDER_TIMEOUT,M as KEYS,Jt as KeyCodeMap,Ho as LIBRARY_DISABLED_TYPES,zt as LIBRARY_SIDEBAR_TAB,ur as LINE_CONFIRM_THRESHOLD,jo as LINE_POLYGON_POINT_MERGE_DISTANCE,as as LOCAL_FONT_PROTOCOL,Un as MAX_CUSTOM_COLORS_USED_IN_CANVAS,Eo as MAX_DECIMALS_FOR_SVG_EXPORT,io as MAX_ZOOM,Te as MIME_TYPES,cr as MINIMUM_ARROW_SIZE,Sr as MIN_FONT_SIZE,Yo as MIN_WIDTH_OR_HEIGHT,ao as MIN_ZOOM,Qo as MOBILE_ACTION_BUTTON_BG,_e as MONOSPACE_GENERIC_FONT,Es as MQ_MAX_HEIGHT_LANDSCAPE,hs as MQ_MAX_MOBILE,bs as MQ_MAX_TABLET,ms as MQ_MAX_WIDTH_LANDSCAPE,Ts as MQ_MIN_TABLET,gs as MQ_MIN_WIDTH_DESKTOP,_s as MQ_RIGHT_SIDEBAR_MIN_WIDTH,Xo as ORIG_ID,Tr as POINTER_BUTTON,br as POINTER_EVENTS,Ne as PromisePool,Se as Queue,Wt as ROUGHNESS,Co as ROUNDNESS,ge as SANS_SERIF_GENERIC_FONT,oo as SCROLL_TIMEOUT,hr as SHIFT_LOCKING_ANGLE,Kt as SIDE_RESIZING_THRESHOLD,Wo as STATS_PANELS,Vn as STICKY_NOTE_BACKGROUND_PICKS,wr as STICKY_NOTE_BODY_INSET_Y,kr as STICKY_NOTE_EDGE_SHADOW_OPACITY,Nr as STICKY_NOTE_EDGE_SHADOW_WIDTH,Lr as STICKY_NOTE_FALLBACK_FONT_SIZE,Ir as STICKY_NOTE_FONT_STEP,Ut as STICKY_NOTE_FOOTER,Or as STICKY_NOTE_MAX_FONT_SIZE,Rr as STICKY_NOTE_MIN_FONT_SIZE,Cr as STICKY_NOTE_MIN_SIZE,kt as STICKY_NOTE_PADDING,Pr as STICKY_NOTE_SHADOW_OFFSET,Dr as STICKY_NOTE_SHADOW_OPACITY,Yn as STICKY_NOTE_STROKE_PICKS,Bt as STRING_MIME_TYPES,ve as STROKE_WIDTH,Po as STROKE_WIDTH_KEYS,xo as SVG_DOCUMENT_PREAMBLE,_o as SVG_NS,eo as TAP_TWICE_TIMEOUT,Oo as TEXT_ALIGN,ir as TEXT_AUTOWRAP_THRESHOLD,fr as TEXT_TO_CENTER_SNAP_THRESHOLD,Ar as THEME,no as TITLE_TIMEOUT,Ko as TOOL_TYPE,to as TOUCH_CTX_MENU_TIMEOUT,ho as URL_HASH_KEYS,fo as URL_QUERY_KEYS,$t as UserIdleState,yo as VERSIONS,ro as VERSION_TIMEOUT,Ro as VERTICAL_ALIGN,Xe as VersionedSnapshotStore,L as WINDOWS_EMOJI_FALLBACK_FONT,gr as YOUTUBE_STATES,so as ZOOM_STEP,li as addEventListener,ya as allowFullScreen,Nn as applyDarkModeFilter,Va as arrayToList,Ba as arrayToMap,Wa as arrayToMapWithIndex,Ya as arrayToObject,ni as assertNever,Ka as bytesToHexString,ia as capitalizeString,hi as castArray,Ea as chunk,ai as cloneJSON,Zn as colorToHex,ti as composeEventHandlers,Rs as createUserAgentDescriptor,fa as debounce,Ms as deriveStylesPanelMode,ga as distance,ma as easeOut,Ge as escapeDoubleQuotes,va as exitFullScreen,wa as findIndex,Fa as findLastIndex,Ua as focusNearestParent,jn as getAllColorsSpecificShade,aa as getDateTime,Qr as getExportSource,Ei as getFeatureFlag,xe as getFontFamilyFallbacks,rn as getFontFamilyString,pa as getFontString,Ss as getFormFactor,cn as getFrame,Nt as getGenericFontFamilyFallback,Ra as getGlobalCSSVariable,Ws as getGridPoint,ls as getLineHeight,ka as getNearestScrollableContainer,Gs as getSizeFromPoints,Do as getStrokeWidthByKey,ci as getSvgPathFromStroke,Ga as getUpdatedTimestamp,Da as getVersion,is as getVerticalOffset,ri as invariant,Ie as isAndroid,di as isAnyTrue,Ps as isArrowKey,On as isBounds,vs as isBrave,Xt as isChrome,er as isColorDark,Le as isDarwin,$a as isDevEnv,As as isFirefox,Aa as isFullScreen,we as isIOS,nn as isInputLike,ca as isInteractive,en as isLatinChar,Ci as isLocalLink,si as isMemberOf,jt as isMobileBreakpoint,Qn as isOpaqueColor,Za as isPrimitive,Ke as isProdEnv,Ja as isPromiseLike,Oa as isRTL,pn as isReadonlyArray,Qa as isRunningInIframe,ys as isSafari,_a as isSelectionLikeTool,Xa as isServerEnv,un as isShallowEqual,qt as isTabletBreakpoint,q as isTestEnv,la as isToolIcon,Ee as isTransparent,xs as isWindows,ua as isWritableElement,Os as loadDesktopUIModePreference,Ca as mapFind,Cs as matchKey,oi as memoize,Ia as muteFSAbortError,Pa as nFormatter,da as nextAnimationFrame,ui as normalizeEOL,tr as normalizeInputColor,An as normalizeLink,bi as oneOf,Ha as preventUnload,Re as promiseTry,ei as queryFocusableElements,Mi as randomId,vi as randomInteger,mi as reduceToCommonValue,kn as removeDarkModeFilter,ba as removeSelection,Bs as rescalePoints,Si as reseed,Me as resolvablePromise,N as rgbToHex,fi as safelyParseJSON,Ma as sceneCoordsToViewportCoords,Ri as seededRandom,Ta as selectNode,qn as setColorAlpha,sa as setDateTimeForTests,Ls as setDesktopUIMode,Ti as setFeatureFlag,Ns as shouldMaintainAspectRatio,Ds as shouldResizeFromCenter,ks as shouldRotateWithDiscreteAngle,dn as sizeOf,Na as supportsEmoji,sr as supportsResizeObserver,ha as throttleRAF,za as toArray,pi as toBrandedType,ln as toIterable,Pi as toValidURL,La as tupleToCoors,xa as updateActiveTool,qa as updateObject,ii as updateStable,Sa as viewportCoordsToSceneCoords,ja as wrapEvent};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export declare const applyDarkModeFilter: (color: string, enable?: boolean) => string;
|
|
2
|
+
export declare const removeDarkModeFilter: (color: string) => string;
|
|
2
3
|
export type ColorTuple = readonly [string, string, string, string, string];
|
|
3
4
|
export type ColorPaletteCustom = {
|
|
4
5
|
[key: string]: ColorTuple | string;
|
|
@@ -28,8 +29,16 @@ export declare const COLOR_PALETTE: {
|
|
|
28
29
|
};
|
|
29
30
|
export type ColorPalette = typeof COLOR_PALETTE;
|
|
30
31
|
export type ColorPickerColor = keyof typeof COLOR_PALETTE;
|
|
32
|
+
/** number of slots in the color-picker top-picks strip — the strip layout is
|
|
33
|
+
* sized for exactly this many swatches, and pick customization (replace /
|
|
34
|
+
* reorder) preserves it */
|
|
35
|
+
export declare const COLOR_TOP_PICKS_SLOTS = 5;
|
|
31
36
|
export declare const DEFAULT_ELEMENT_STROKE_PICKS: ColorTuple;
|
|
32
37
|
export declare const DEFAULT_ELEMENT_BACKGROUND_PICKS: ColorTuple;
|
|
38
|
+
export declare const BUCKET_FILL_BACKGROUND_PICKS: ColorTuple;
|
|
39
|
+
export declare const DEFAULT_STICKY_NOTE_BG = "#ffdf6b";
|
|
40
|
+
export declare const STICKY_NOTE_STROKE_PICKS: ColorTuple;
|
|
41
|
+
export declare const STICKY_NOTE_BACKGROUND_PICKS: ColorTuple;
|
|
33
42
|
export declare const DEFAULT_CANVAS_BACKGROUND_PICKS: ColorTuple;
|
|
34
43
|
export declare const DEFAULT_ELEMENT_STROKE_COLOR_PALETTE: {
|
|
35
44
|
readonly cyan: readonly ["#e3fafc", "#99e9f2", "#3bc9db", "#15aabf", "#0c8599"];
|
|
@@ -67,12 +76,25 @@ export declare const DEFAULT_ELEMENT_BACKGROUND_COLOR_PALETTE: {
|
|
|
67
76
|
};
|
|
68
77
|
export declare const getAllColorsSpecificShade: (index: 0 | 1 | 2 | 3 | 4) => ("#fff5f5" | "#ffc9c9" | "#ff8787" | "#fa5252" | "#e03131" | "#fff0f6" | "#fcc2d7" | "#f783ac" | "#e64980" | "#c2255c" | "#f8f0fc" | "#eebefa" | "#da77f2" | "#be4bdb" | "#9c36b5" | "#f3f0ff" | "#d0bfff" | "#9775fa" | "#7950f2" | "#6741d9" | "#e7f5ff" | "#a5d8ff" | "#4dabf7" | "#228be6" | "#1971c2" | "#e3fafc" | "#99e9f2" | "#3bc9db" | "#15aabf" | "#0c8599" | "#e6fcf5" | "#96f2d7" | "#38d9a9" | "#12b886" | "#099268" | "#ebfbee" | "#b2f2bb" | "#69db7c" | "#40c057" | "#2f9e44" | "#fff9db" | "#ffec99" | "#ffd43b" | "#fab005" | "#f08c00" | "#fff4e6" | "#ffd8a8" | "#ffa94d" | "#fd7e14" | "#e8590c")[];
|
|
69
78
|
export declare const rgbToHex: (r: number, g: number, b: number, a?: number) => string;
|
|
79
|
+
/**
|
|
80
|
+
* @returns the color with its alpha replaced by `alpha` (as #RRGGBBAA), or the
|
|
81
|
+
* input unchanged if it's not a valid color
|
|
82
|
+
*/
|
|
83
|
+
export declare const setColorAlpha: (color: string, alpha: number) => string;
|
|
70
84
|
/**
|
|
71
85
|
* @returns #RRGGBB or #RRGGBBAA based on color containing non-opaque alpha,
|
|
72
86
|
* null if not valid color
|
|
73
87
|
*/
|
|
74
88
|
export declare const colorToHex: (color: string) => string | null;
|
|
75
89
|
export declare const isTransparent: (color: string) => boolean;
|
|
90
|
+
/**
|
|
91
|
+
* Whether the color is fully opaque (alpha exactly 1).
|
|
92
|
+
*
|
|
93
|
+
* NOT the negation of `isTransparent`, which is true only at alpha 0 — a
|
|
94
|
+
* partial-alpha color (`#RRGGBBAA`, `rgba(…, 0.5)`) is neither transparent
|
|
95
|
+
* (it renders) nor opaque (what's beneath shows through it).
|
|
96
|
+
*/
|
|
97
|
+
export declare const isOpaqueColor: (color: string) => boolean;
|
|
76
98
|
export declare const COLOR_OUTLINE_CONTRAST_THRESHOLD = 240;
|
|
77
99
|
export declare const isColorDark: (color: string, threshold?: number) => boolean;
|
|
78
100
|
/**
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { ExcalidrawElement, FontFamilyValues } from "@excalidraw/element/types";
|
|
2
2
|
import type { AppProps, AppState } from "@excalidraw/excalidraw/types";
|
|
3
|
+
export { DEFAULT_STICKY_NOTE_BG } from "./colors";
|
|
3
4
|
export declare const supportsResizeObserver: boolean;
|
|
4
5
|
export declare const APP_NAME = "Excalidraw";
|
|
5
6
|
export declare const TEXT_AUTOWRAP_THRESHOLD = 36;
|
|
@@ -52,6 +53,7 @@ export declare enum EVENT {
|
|
|
52
53
|
POINTER_MOVE = "pointermove",
|
|
53
54
|
POINTER_DOWN = "pointerdown",
|
|
54
55
|
POINTER_UP = "pointerup",
|
|
56
|
+
POINTER_CANCEL = "pointercancel",
|
|
55
57
|
STATE_CHANGE = "statechange",
|
|
56
58
|
WHEEL = "wheel",
|
|
57
59
|
TOUCH_START = "touchstart",
|
|
@@ -150,7 +152,53 @@ export declare const FRAME_STYLE: {
|
|
|
150
152
|
};
|
|
151
153
|
export declare const MIN_FONT_SIZE = 1;
|
|
152
154
|
export declare const DEFAULT_FONT_SIZE = 20;
|
|
155
|
+
export declare const STICKY_NOTE_MIN_FONT_SIZE = 16;
|
|
156
|
+
export declare const STICKY_NOTE_MAX_FONT_SIZE = 512;
|
|
157
|
+
export declare const STICKY_NOTE_FALLBACK_FONT_SIZE = 28;
|
|
158
|
+
export declare const STICKY_NOTE_FONT_STEP = 2;
|
|
159
|
+
export declare const STICKY_NOTE_PADDING = 16;
|
|
160
|
+
/**
|
|
161
|
+
* The creation-date footer: a 20px text row under the label body plus a 12px
|
|
162
|
+
* gap above it, inside the note's bottom padding. Reserved for every note —
|
|
163
|
+
* also when `created` is unknown — so geometry never depends on data
|
|
164
|
+
* availability. The label is chosen by width bucket, never measured, so
|
|
165
|
+
* painting stays measurement-free (the server has no text measurer):
|
|
166
|
+
* `minBodyWidthForYear` is the worst case ("30 May 2026") in the system sans
|
|
167
|
+
* stack at 12px, with margin for wider fallbacks such as DejaVu Sans.
|
|
168
|
+
*/
|
|
169
|
+
/**
|
|
170
|
+
* The creation-date footer of a sticky note. The label body ends `height`
|
|
171
|
+
* above the note's bottom padding, and the date's baseline sits
|
|
172
|
+
* `baselineFromBottom` above the note's bottom edge — so the 12px glyphs
|
|
173
|
+
* (~9px above the baseline, ~3px below) end up roughly 11px from the edge
|
|
174
|
+
* with a ~13px gap to the label body above them.
|
|
175
|
+
*/
|
|
176
|
+
export declare const STICKY_NOTE_FOOTER: {
|
|
177
|
+
readonly height: 20;
|
|
178
|
+
readonly fontSize: 12;
|
|
179
|
+
readonly fontFamily: "Helvetica, Arial, sans-serif";
|
|
180
|
+
readonly baselineFromBottom: 14;
|
|
181
|
+
readonly opacity: 1;
|
|
182
|
+
readonly minBodyWidthForYear: 80;
|
|
183
|
+
};
|
|
184
|
+
/**
|
|
185
|
+
* outer height → label body height: top + bottom padding + footer. The body
|
|
186
|
+
* is what the label is fitted into; a middle-aligned label is still centered
|
|
187
|
+
* in the whole padded note when it fits (see `computeBoundTextPosition`).
|
|
188
|
+
*/
|
|
189
|
+
export declare const STICKY_NOTE_BODY_INSET_Y: number;
|
|
190
|
+
export declare const DEFAULT_STICKY_NOTE_SIZE = 250;
|
|
191
|
+
export declare const STICKY_NOTE_MIN_SIZE = 75;
|
|
192
|
+
export declare const STICKY_NOTE_SHADOW_OFFSET = 3;
|
|
193
|
+
export declare const STICKY_NOTE_SHADOW_OPACITY = 0.16;
|
|
194
|
+
export declare const STICKY_NOTE_EDGE_SHADOW_WIDTH = 0.5;
|
|
195
|
+
export declare const STICKY_NOTE_EDGE_SHADOW_OPACITY = 0.08;
|
|
153
196
|
export declare const DEFAULT_FONT_FAMILY: FontFamilyValues;
|
|
197
|
+
/** number of slots in the font-picker top-picks strip — pick customization
|
|
198
|
+
* (replace / reorder) preserves it. Must equal `DEFAULT_FONTS.length` in
|
|
199
|
+
* `packages/excalidraw/components/FontPicker/FontPicker.tsx` (enforced by
|
|
200
|
+
* `fontTopPicks.test.ts`) */
|
|
201
|
+
export declare const FONT_TOP_PICKS_SLOTS = 3;
|
|
154
202
|
export declare const DEFAULT_TEXT_ALIGN = "left";
|
|
155
203
|
export declare const DEFAULT_VERTICAL_ALIGN = "top";
|
|
156
204
|
export declare const DEFAULT_VERSION = "{version}";
|
|
@@ -227,6 +275,8 @@ export declare const SCROLL_TIMEOUT = 100;
|
|
|
227
275
|
export declare const ZOOM_STEP = 0.1;
|
|
228
276
|
export declare const MIN_ZOOM = 0.1;
|
|
229
277
|
export declare const MAX_ZOOM = 30;
|
|
278
|
+
/** 100% zoom, for computations that have no editor zoom to go by */
|
|
279
|
+
export declare const DEFAULT_ZOOM: AppState["zoom"];
|
|
230
280
|
export declare const HYPERLINK_TOOLTIP_DELAY = 300;
|
|
231
281
|
export declare const IDLE_THRESHOLD = 60000;
|
|
232
282
|
export declare const ACTIVE_THRESHOLD = 3000;
|
|
@@ -262,6 +312,7 @@ export declare const TEXT_ALIGN: {
|
|
|
262
312
|
RIGHT: string;
|
|
263
313
|
};
|
|
264
314
|
export declare const ELEMENT_READY_TO_ERASE_OPACITY = 20;
|
|
315
|
+
export declare const ELEMENT_PENDING_DRAW_SHAPE_OPACITY = 70;
|
|
265
316
|
export declare const DEFAULT_PROPORTIONAL_RADIUS = 0.25;
|
|
266
317
|
export declare const DEFAULT_ADAPTIVE_RADIUS = 32;
|
|
267
318
|
export declare const ROUNDNESS: {
|
|
@@ -312,8 +363,11 @@ export declare const TOOL_TYPE: {
|
|
|
312
363
|
readonly hand: "hand";
|
|
313
364
|
readonly frame: "frame";
|
|
314
365
|
readonly magicframe: "magicframe";
|
|
366
|
+
readonly stickynote: "stickynote";
|
|
315
367
|
readonly embeddable: "embeddable";
|
|
316
368
|
readonly laser: "laser";
|
|
369
|
+
readonly autoshape: "autoshape";
|
|
370
|
+
readonly bucketfill: "bucketfill";
|
|
317
371
|
};
|
|
318
372
|
export declare const EDITOR_LS_KEYS: {
|
|
319
373
|
readonly OAI_API_KEY: "excalidraw-oai-api-key";
|
|
@@ -46,6 +46,7 @@ export declare const KEYS: {
|
|
|
46
46
|
readonly SUBTRACT: "-";
|
|
47
47
|
readonly SLASH: "/";
|
|
48
48
|
readonly A: "a";
|
|
49
|
+
readonly B: "b";
|
|
49
50
|
readonly C: "c";
|
|
50
51
|
readonly D: "d";
|
|
51
52
|
readonly E: "e";
|
|
@@ -54,6 +55,7 @@ export declare const KEYS: {
|
|
|
54
55
|
readonly H: "h";
|
|
55
56
|
readonly I: "i";
|
|
56
57
|
readonly L: "l";
|
|
58
|
+
readonly N: "n";
|
|
57
59
|
readonly O: "o";
|
|
58
60
|
readonly P: "p";
|
|
59
61
|
readonly Q: "q";
|
|
@@ -101,6 +103,7 @@ export declare const KeyCodeMap: Map<ValueOf<{
|
|
|
101
103
|
readonly SUBTRACT: "-";
|
|
102
104
|
readonly SLASH: "/";
|
|
103
105
|
readonly A: "a";
|
|
106
|
+
readonly B: "b";
|
|
104
107
|
readonly C: "c";
|
|
105
108
|
readonly D: "d";
|
|
106
109
|
readonly E: "e";
|
|
@@ -109,6 +112,7 @@ export declare const KeyCodeMap: Map<ValueOf<{
|
|
|
109
112
|
readonly H: "h";
|
|
110
113
|
readonly I: "i";
|
|
111
114
|
readonly L: "l";
|
|
115
|
+
readonly N: "n";
|
|
112
116
|
readonly O: "o";
|
|
113
117
|
readonly P: "p";
|
|
114
118
|
readonly Q: "q";
|
|
@@ -6,4 +6,4 @@ export declare const getSizeFromPoints: (points: readonly (GlobalPoint | LocalPo
|
|
|
6
6
|
};
|
|
7
7
|
/** @arg dimension, 0 for rescaling only x, 1 for y */
|
|
8
8
|
export declare const rescalePoints: <Point extends GlobalPoint | LocalPoint>(dimension: 0 | 1, newSize: number, points: readonly Point[], normalize: boolean) => Point[];
|
|
9
|
-
export declare const getGridPoint: (x: number, y: number, gridSize: NullableGridSize) =>
|
|
9
|
+
export declare const getGridPoint: (x: number, y: number, gridSize: NullableGridSize) => GlobalPoint;
|
|
@@ -1,3 +1,10 @@
|
|
|
1
1
|
export declare const randomInteger: () => number;
|
|
2
2
|
export declare const reseed: (seed: number) => void;
|
|
3
3
|
export declare const randomId: () => string;
|
|
4
|
+
/**
|
|
5
|
+
* Deterministic PRNG (mulberry32) for a given seed: same seed, same
|
|
6
|
+
* sequence — used where a render must be stable across frames and clients
|
|
7
|
+
* (e.g. the sticky note's corner jitter) and roughjs's `Random` is
|
|
8
|
+
* unsuitable (it degenerates for seed 0). Returns numbers in [0, 1).
|
|
9
|
+
*/
|
|
10
|
+
export declare const seededRandom: (seed: number) => () => number;
|
|
@@ -51,7 +51,7 @@ export declare const updateActiveTool: (appState: Pick<AppState, "activeTool">,
|
|
|
51
51
|
locked?: boolean;
|
|
52
52
|
fromSelection?: boolean;
|
|
53
53
|
}) & {
|
|
54
|
-
|
|
54
|
+
lastActiveTool?: ActiveTool | null;
|
|
55
55
|
}) => AppState["activeTool"];
|
|
56
56
|
export declare const isFullScreen: () => boolean;
|
|
57
57
|
export declare const allowFullScreen: () => Promise<void>;
|
|
@@ -72,7 +72,7 @@ export declare class Scene {
|
|
|
72
72
|
getElementIndex(elementId: string): number;
|
|
73
73
|
getContainerElement: (element: (ExcalidrawElement & {
|
|
74
74
|
containerId: ExcalidrawElement["id"] | null;
|
|
75
|
-
}) | null) => import("@excalidraw/element/types").ExcalidrawLinearElement | import("@excalidraw/element/types").ExcalidrawSelectionElement | import("@excalidraw/element/types").ExcalidrawRectangleElement | import("@excalidraw/element/types").ExcalidrawDiamondElement | import("@excalidraw/element/types").ExcalidrawEllipseElement | import("@excalidraw/element/types").ExcalidrawEmbeddableElement | import("@excalidraw/element/types").ExcalidrawIframeElement | import("@excalidraw/element/types").ExcalidrawImageElement | import("@excalidraw/element/types").ExcalidrawFrameElement | import("@excalidraw/element/types").ExcalidrawMagicFrameElement | import("@excalidraw/element/types").ExcalidrawTextElement | import("@excalidraw/element/types").ExcalidrawFreeDrawElement | null;
|
|
75
|
+
}) | null) => import("@excalidraw/element/types").ExcalidrawLinearElement | import("@excalidraw/element/types").ExcalidrawSelectionElement | import("@excalidraw/element/types").ExcalidrawRectangleElement | import("@excalidraw/element/types").ExcalidrawStickyNoteElement | import("@excalidraw/element/types").ExcalidrawDiamondElement | import("@excalidraw/element/types").ExcalidrawEllipseElement | import("@excalidraw/element/types").ExcalidrawEmbeddableElement | import("@excalidraw/element/types").ExcalidrawIframeElement | import("@excalidraw/element/types").ExcalidrawImageElement | import("@excalidraw/element/types").ExcalidrawFrameElement | import("@excalidraw/element/types").ExcalidrawMagicFrameElement | import("@excalidraw/element/types").ExcalidrawTextElement | import("@excalidraw/element/types").ExcalidrawFreeDrawElement | null;
|
|
76
76
|
getElementsFromId: (id: string) => ExcalidrawElement[];
|
|
77
77
|
mutateElement<TElement extends Mutable<ExcalidrawElement>>(element: TElement, updates: ElementUpdate<TElement>, options?: {
|
|
78
78
|
informMutation: boolean;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { GlobalPoint } from "@excalidraw/math";
|
|
2
|
+
import type { AppState } from "@excalidraw/excalidraw/types";
|
|
3
|
+
import type { ElementsMap, ExcalidrawArrowElement, ExcalidrawTextElement, FixedPoint, NonDeleted, NonDeletedExcalidrawElement, TextAlign, VerticalAlign } from "./types";
|
|
4
|
+
export type ArrowEndpoint = {
|
|
5
|
+
arrow: NonDeleted<ExcalidrawArrowElement>;
|
|
6
|
+
startOrEnd: "start" | "end";
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Finds a free (unbound) arrow endpoint under the cursor, front-most first.
|
|
10
|
+
* Used by the text tool to offer creating a text label anchored to the tip of
|
|
11
|
+
* an arrow.
|
|
12
|
+
*/
|
|
13
|
+
export declare const getUnboundArrowEndpointAtPoint: (scenePointer: GlobalPoint, elements: readonly NonDeletedExcalidrawElement[], elementsMap: ElementsMap, zoom: AppState["zoom"]) => ArrowEndpoint | null;
|
|
14
|
+
/**
|
|
15
|
+
* Describes how a text element should be created so that it reads as a label
|
|
16
|
+
* for the given arrow endpoint.
|
|
17
|
+
*
|
|
18
|
+
* The arrow is treated as fixed: rather than routing the arrow to the text, we
|
|
19
|
+
* pick the side of the text the arrow should attach to (the one it already
|
|
20
|
+
* points at), and place the text so that side's midpoint lands on the existing
|
|
21
|
+
* endpoint. The alignment returned pins that same midpoint while the text is
|
|
22
|
+
* typed, so the arrow doesn't swing around during editing.
|
|
23
|
+
*/
|
|
24
|
+
export declare const getTextBindingForArrowEndpoint: (arrow: NonDeleted<ExcalidrawArrowElement>, startOrEnd: "start" | "end", elementsMap: ElementsMap,
|
|
25
|
+
/**
|
|
26
|
+
* stroke width the text will be created with — the binding gap is derived
|
|
27
|
+
* from the *bind target*, so using the arrow's would offset the anchor by
|
|
28
|
+
* half the difference between the two
|
|
29
|
+
*/
|
|
30
|
+
targetStrokeWidth: number) => {
|
|
31
|
+
/** the text-local ratio the arrow binds to (a side midpoint) */
|
|
32
|
+
fixedPoint: FixedPoint;
|
|
33
|
+
textAlign: TextAlign;
|
|
34
|
+
verticalAlign: VerticalAlign;
|
|
35
|
+
/** scene position the text's bound side midpoint should sit at */
|
|
36
|
+
anchor: GlobalPoint;
|
|
37
|
+
} | null;
|
|
38
|
+
/**
|
|
39
|
+
* Whether an arrow endpoint is bound to this text — i.e. the text serves as an
|
|
40
|
+
* arrow-endpoint label. Checked on the arrows' own bindings: the text's
|
|
41
|
+
* `boundElements` only says an arrow relates to it, while the binding on the
|
|
42
|
+
* arrow is the authoritative side of the relationship.
|
|
43
|
+
*/
|
|
44
|
+
export declare const isEndpointBoundText: (text: ExcalidrawTextElement, elementsMap: ElementsMap) => boolean;
|
|
45
|
+
/** the anchor a text bound to an arrow endpoint grows away from */
|
|
46
|
+
export declare const getEndpointBoundTextDragAnchor: (newElement: ExcalidrawTextElement) => {
|
|
47
|
+
anchorRatio: number;
|
|
48
|
+
anchorX: number;
|
|
49
|
+
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type GlobalPoint } from "@excalidraw/math";
|
|
2
2
|
import type { AppState, NullableGridSize } from "@excalidraw/excalidraw/types";
|
|
3
3
|
import { LinearElementEditor } from "../linearElementEditor";
|
|
4
|
-
import type { ElementsMap, ExcalidrawArrowElement, ExcalidrawBindableElement, NonDeletedSceneElementsMap } from "../types";
|
|
4
|
+
import type { ElementsMap, ExcalidrawArrowElement, ExcalidrawBindableElement, FixedPointBinding, NonDeletedSceneElementsMap } from "../types";
|
|
5
5
|
import type { Scene } from "../Scene";
|
|
6
6
|
export declare const isFocusPointVisible: (focusPoint: GlobalPoint, arrow: ExcalidrawArrowElement, bindableElement: ExcalidrawBindableElement, elementsMap: ElementsMap, appState: {
|
|
7
7
|
isBindingEnabled: AppState["isBindingEnabled"];
|
|
@@ -22,6 +22,9 @@ export declare const handleFocusPointPointerDown: (arrow: ExcalidrawArrowElement
|
|
|
22
22
|
x: number;
|
|
23
23
|
y: number;
|
|
24
24
|
};
|
|
25
|
+
arrowOtherEndpointInitialBinding: FixedPointBinding | null;
|
|
26
|
+
};
|
|
27
|
+
export declare const handleFocusPointPointerUp: (linearElementEditor: LinearElementEditor, scene: Scene) => {
|
|
28
|
+
arrowOtherEndpointInitialBinding: null;
|
|
25
29
|
};
|
|
26
|
-
export declare const handleFocusPointPointerUp: (linearElementEditor: LinearElementEditor, scene: Scene) => void;
|
|
27
30
|
export declare const handleFocusPointHover: (arrow: ExcalidrawArrowElement, scenePointerX: number, scenePointerY: number, scene: Scene, appState: AppState) => "start" | "end" | null;
|