@excalidraw/common 0.18.0-4872083 → 0.18.0-4ce38fb

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/dist/dev/index.js +145 -14
  2. package/dist/dev/index.js.map +2 -2
  3. package/dist/prod/index.js +3 -3
  4. package/dist/types/common/src/colors.d.ts +13 -7
  5. package/dist/types/common/src/constants.d.ts +54 -0
  6. package/dist/types/common/src/keys.d.ts +2 -0
  7. package/dist/types/common/src/random.d.ts +7 -0
  8. package/dist/types/common/src/utils.d.ts +5 -0
  9. package/dist/types/element/src/Scene.d.ts +1 -1
  10. package/dist/types/element/src/binding.d.ts +13 -7
  11. package/dist/types/element/src/collision.d.ts +14 -5
  12. package/dist/types/element/src/comparisons.d.ts +5 -3
  13. package/dist/types/element/src/delta.d.ts +23 -1
  14. package/dist/types/element/src/duplicate.d.ts +60 -0
  15. package/dist/types/element/src/flowchart.d.ts +5 -1
  16. package/dist/types/element/src/frame.d.ts +2 -2
  17. package/dist/types/element/src/index.d.ts +2 -0
  18. package/dist/types/element/src/linearElementEditor.d.ts +10 -0
  19. package/dist/types/element/src/listMarker.d.ts +34 -0
  20. package/dist/types/element/src/mutateElement.d.ts +1 -1
  21. package/dist/types/element/src/newElement.d.ts +39 -3
  22. package/dist/types/element/src/renderElement.d.ts +21 -4
  23. package/dist/types/element/src/shape.d.ts +15 -1
  24. package/dist/types/element/src/sizeHelpers.d.ts +6 -0
  25. package/dist/types/element/src/stickyNote.d.ts +183 -0
  26. package/dist/types/element/src/textElement.d.ts +9 -1
  27. package/dist/types/element/src/transform.d.ts +25 -6
  28. package/dist/types/element/src/typeChecks.d.ts +3 -2
  29. package/dist/types/element/src/types.d.ts +35 -6
  30. package/dist/types/element/src/utils.d.ts +15 -4
  31. package/dist/types/element/src/zindex.d.ts +1 -1
  32. package/dist/types/excalidraw/actions/actionAddToLibrary.d.ts +60 -3
  33. package/dist/types/excalidraw/actions/actionAlign.d.ts +6 -6
  34. package/dist/types/excalidraw/actions/actionBoundText.d.ts +40 -2
  35. package/dist/types/excalidraw/actions/actionCanvas.d.ts +147 -14
  36. package/dist/types/excalidraw/actions/actionClipboard.d.ts +40 -2
  37. package/dist/types/excalidraw/actions/actionCropEditor.d.ts +20 -1
  38. package/dist/types/excalidraw/actions/actionDeleteSelected.d.ts +61 -4
  39. package/dist/types/excalidraw/actions/actionDeselect.d.ts +23 -1
  40. package/dist/types/excalidraw/actions/actionDistribute.d.ts +2 -2
  41. package/dist/types/excalidraw/actions/actionElementLink.d.ts +20 -1
  42. package/dist/types/excalidraw/actions/actionElementLock.d.ts +40 -2
  43. package/dist/types/excalidraw/actions/actionExport.d.ts +41 -3
  44. package/dist/types/excalidraw/actions/actionFinalize.d.ts +1 -0
  45. package/dist/types/excalidraw/actions/actionFrame.d.ts +111 -4
  46. package/dist/types/excalidraw/actions/actionGroup.d.ts +40 -2
  47. package/dist/types/excalidraw/actions/actionLinearEditor.d.ts +71 -2
  48. package/dist/types/excalidraw/actions/actionLink.d.ts +20 -1
  49. package/dist/types/excalidraw/actions/actionMenu.d.ts +20 -1
  50. package/dist/types/excalidraw/actions/actionProperties.d.ts +50 -8
  51. package/dist/types/excalidraw/actions/actionSelectAll.d.ts +20 -1
  52. package/dist/types/excalidraw/actions/actionStyles.d.ts +21 -2
  53. package/dist/types/excalidraw/actions/actionToggleArrowBinding.d.ts +20 -1
  54. package/dist/types/excalidraw/actions/actionToggleGridMode.d.ts +20 -1
  55. package/dist/types/excalidraw/actions/actionToggleMidpointSnapping.d.ts +20 -1
  56. package/dist/types/excalidraw/actions/actionToggleObjectsSnapMode.d.ts +20 -1
  57. package/dist/types/excalidraw/actions/actionToggleSearchMenu.d.ts +20 -1
  58. package/dist/types/excalidraw/actions/actionToggleShowHints.d.ts +197 -0
  59. package/dist/types/excalidraw/actions/actionToggleStats.d.ts +20 -1
  60. package/dist/types/excalidraw/actions/actionToggleViewMode.d.ts +20 -1
  61. package/dist/types/excalidraw/actions/actionToggleZenMode.d.ts +20 -1
  62. package/dist/types/excalidraw/actions/colorTargets.d.ts +39 -0
  63. package/dist/types/excalidraw/actions/index.d.ts +1 -0
  64. package/dist/types/excalidraw/actions/types.d.ts +1 -1
  65. package/dist/types/excalidraw/appState.d.ts +26 -4
  66. package/dist/types/excalidraw/components/App.arrowText.d.ts +28 -30
  67. package/dist/types/excalidraw/components/App.bucketFill.d.ts +10 -0
  68. package/dist/types/excalidraw/components/App.clipboard.d.ts +31 -0
  69. package/dist/types/excalidraw/components/App.cursor.d.ts +8 -0
  70. package/dist/types/excalidraw/components/App.d.ts +110 -199
  71. package/dist/types/excalidraw/components/App.duplicate.d.ts +101 -0
  72. package/dist/types/excalidraw/components/App.pan.d.ts +62 -0
  73. package/dist/types/excalidraw/components/App.text.d.ts +146 -0
  74. package/dist/types/excalidraw/components/App.textTool.d.ts +140 -0
  75. package/dist/types/excalidraw/components/App.toolDrag.d.ts +63 -0
  76. package/dist/types/excalidraw/components/App.viewport.d.ts +41 -1
  77. package/dist/types/excalidraw/components/App.wheel.d.ts +26 -0
  78. package/dist/types/excalidraw/components/ColorPicker/ColorPicker.d.ts +6 -2
  79. package/dist/types/excalidraw/components/ColorPicker/CustomColorList.d.ts +3 -1
  80. package/dist/types/excalidraw/components/ColorPicker/Picker.d.ts +4 -1
  81. package/dist/types/excalidraw/components/ColorPicker/PickerColorList.d.ts +4 -2
  82. package/dist/types/excalidraw/components/ColorPicker/ShadeList.d.ts +4 -2
  83. package/dist/types/excalidraw/components/ColorPicker/TopPicks.d.ts +8 -1
  84. package/dist/types/excalidraw/components/ColorPicker/colorTopPicksDnD.d.ts +11 -0
  85. package/dist/types/excalidraw/components/FileDropOverlay.d.ts +2 -0
  86. package/dist/types/excalidraw/components/FontPicker/FontPicker.d.ts +4 -1
  87. package/dist/types/excalidraw/components/FontPicker/FontPickerList.d.ts +6 -1
  88. package/dist/types/excalidraw/components/FontPicker/fontTopPicksDnD.d.ts +12 -0
  89. package/dist/types/excalidraw/components/IconButton.d.ts +2 -0
  90. package/dist/types/excalidraw/components/LibraryMenuSection.d.ts +6 -2
  91. package/dist/types/excalidraw/components/LibraryUnit.d.ts +7 -2
  92. package/dist/types/excalidraw/components/Tools.d.ts +7 -2
  93. package/dist/types/excalidraw/components/Tooltip.d.ts +15 -1
  94. package/dist/types/excalidraw/components/TopPicksDnD/TopPicksContextMenu.d.ts +14 -0
  95. package/dist/types/excalidraw/components/TopPicksDnD/TopPicksTip.d.ts +11 -0
  96. package/dist/types/excalidraw/components/TopPicksDnD/topPicksDnD.d.ts +58 -0
  97. package/dist/types/excalidraw/components/canvases/NewElementCanvas.d.ts +2 -0
  98. package/dist/types/excalidraw/components/icons.d.ts +2 -0
  99. package/dist/types/excalidraw/components/main-menu/DefaultItems.d.ts +2 -0
  100. package/dist/types/excalidraw/components/shapeActionPredicates.d.ts +2 -2
  101. package/dist/types/excalidraw/data/blob.d.ts +42 -4
  102. package/dist/types/excalidraw/data/json.d.ts +21 -2
  103. package/dist/types/excalidraw/fonts/Fonts.d.ts +3 -2
  104. package/dist/types/excalidraw/hooks/useTextEditorFocus.d.ts +5 -5
  105. package/dist/types/excalidraw/lasso/utils.d.ts +2 -0
  106. package/dist/types/excalidraw/renderOverrides.d.ts +9 -0
  107. package/dist/types/excalidraw/renderer/helpers.d.ts +25 -0
  108. package/dist/types/excalidraw/renderer/interactiveScene.d.ts +1 -1
  109. package/dist/types/excalidraw/scene/Renderer.d.ts +64 -2
  110. package/dist/types/excalidraw/scene/index.d.ts +1 -1
  111. package/dist/types/excalidraw/scene/types.d.ts +3 -1
  112. package/dist/types/excalidraw/types.d.ts +140 -18
  113. package/dist/types/excalidraw/viewport.d.ts +33 -1
  114. package/dist/types/excalidraw/wysiwyg/textWysiwyg.d.ts +12 -1
  115. package/dist/types/math/src/curve.d.ts +19 -12
  116. package/dist/types/math/src/segment.d.ts +6 -0
  117. package/dist/types/utils/src/export.d.ts +1 -0
  118. package/dist/types/utils/src/shape.d.ts +2 -2
  119. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- var Ye=Object.create;var Z=Object.defineProperty;var $e=Object.getOwnPropertyDescriptor;var ze=Object.getOwnPropertyNames;var Xe=Object.getPrototypeOf,je=Object.prototype.hasOwnProperty;var qe=(e,t)=>()=>(e&&(t=e(e=0)),t);var Q=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Ze=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of ze(t))!je.call(e,o)&&o!==n&&Z(e,o,{get:()=>t[o],enumerable:!(r=$e(t,o))||r.enumerable});return e};var J=(e,t,n)=>(n=e!=null?Ye(Xe(e)):{},Ze(t||!e||!e.__esModule?Z(n,"default",{value:e,enumerable:!0}):n,e));var h,p=qe(()=>{h={PROD:!0}});var we=Q((Y,Oe)=>{p();(function(e,t){typeof define=="function"&&define.amd?define([],t):typeof Y=="object"?Oe.exports=t():(e.PromisePool=t(),e.promisePool=e.PromisePool)})(Y,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 Ge=Q(H=>{"use strict";p();Object.defineProperty(H,"__esModule",{value:!0});H.sanitizeUrl=void 0;var on=/^([^\w]*)(javascript|data|vbscript)/im,sn=/&#(\w+)(^\w|;)?/g,an=/&(newline|tab);/gi,ln=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim,cn=/^.+(:|&colon;)/gim,un=[".","/"];function pn(e){return un.indexOf(e[0])>-1}function dn(e){return e.replace(sn,function(t,n){return String.fromCharCode(n)})}function fn(e){var t=dn(e||"").replace(an,"").replace(ln,"").trim();if(!t)return"about:blank";if(pn(t))return t;var n=t.match(cn);if(!n)return t;var r=n[0];return on.test(r)?"about:blank":t}H.sanitizeUrl=fn});p();p();var ee=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 _n=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 Je=/^\s+/,et=/\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=tt(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=ie(t),this._roundA=Math.round(100*this._a)/100,this},toHsv:function(){var t=ne(this._r,this._g,this._b);return{h:t.h*360,s:t.s,v:t.v,a:this._a}},toHsvString:function(){var t=ne(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=te(this._r,this._g,this._b);return{h:t.h*360,s:t.s,l:t.l,a:this._a}},toHslString: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.l*100);return this._a==1?"hsl("+n+", "+r+"%, "+o+"%)":"hsla("+n+", "+r+"%, "+o+"%, "+this._roundA+")"},toHex:function(t){return re(this._r,this._g,this._b,t)},toHexString:function(t){return"#"+this.toHex(t)},toHex8:function(t){return st(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:Tt[re(this._r,this._g,this._b,!0)]||!1},toFilter:function(t){var n="#"+oe(this._r,this._g,this._b,this._a),r=n,o=this._gradientType?"GradientType = 1, ":"";if(t){var s=c(t);r="#"+oe(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(ct,arguments)},brighten:function(){return this._applyModification(ut,arguments)},darken:function(){return this._applyModification(pt,arguments)},desaturate:function(){return this._applyModification(at,arguments)},saturate:function(){return this._applyModification(it,arguments)},greyscale:function(){return this._applyModification(lt,arguments)},spin:function(){return this._applyModification(dt,arguments)},_applyCombination:function(t,n){return t.apply(null,[this].concat([].slice.call(n)))},analogous:function(){return this._applyCombination(mt,arguments)},complement:function(){return this._applyCombination(ft,arguments)},monochromatic:function(){return this._applyCombination(Et,arguments)},splitcomplement:function(){return this._applyCombination(ht,arguments)},triad:function(){return this._applyCombination(se,[3])},tetrad:function(){return this._applyCombination(se,[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]=L(e[r]));e=n}return c(e,t)};function tt(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=xt(e)),C(e)=="object"&&(A(e.r)&&A(e.g)&&A(e.b)?(t=nt(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=L(e.s),o=L(e.v),t=ot(e.h,r,o),i=!0,a="hsv"):A(e.h)&&A(e.s)&&A(e.l)&&(r=L(e.s),s=L(e.l),t=rt(e.h,r,s),i=!0,a="hsl"),e.hasOwnProperty("a")&&(n=e.a)),n=ie(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 nt(e,t,n){return{r:E(e,255)*255,g:E(t,255)*255,b:E(n,255)*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+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 rt(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 ne(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 ot(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 re(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 st(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(le(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 oe(e,t,n,r){var o=[x(le(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 at(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 it(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 lt(e){return c(e).desaturate(100)}function ct(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 ut(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 pt(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 dt(e,t){var n=c(e).toHsl(),r=(n.h+t)%360;return n.h=r<0?360+r:r,c(n)}function ft(e){var t=c(e).toHsl();return t.h=(t.h+180)%360,c(t)}function se(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 ht(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 mt(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 Et(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=At(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"},Tt=c.hexNames=bt(B);function bt(e){var t={};for(var n in e)e.hasOwnProperty(n)&&(t[e[n]]=n);return t}function ie(e){return e=parseFloat(e),(isNaN(e)||e<0||e>1)&&(e=1),e}function E(e,t){gt(e)&&(e="100%");var n=_t(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 gt(e){return typeof e=="string"&&e.indexOf(".")!=-1&&parseFloat(e)===1}function _t(e){return typeof e=="string"&&e.indexOf("%")!=-1}function x(e){return e.length==1?"0"+e:""+e}function L(e){return e<=1&&(e=e*100+"%"),e}function le(e){return Math.round(parseFloat(e)*255).toString(16)}function ae(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 xt(e){e=e.replace(Je,"").replace(et,"").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:ae(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:ae(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 At(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 ce}from"@excalidraw/math";import{degreesToRadians as yt}from"@excalidraw/math";var K=typeof window<"u"?new Map:null;function vt(e,t,n,r){let o=e/255,s=t/255,i=n/255,a=yt(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],v=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,v))*255)}}var St=(e,t,n,r)=>{let o=ce(r,0,100)/100,s=u=>{let m=u*(1-o)+(255-u)*o;return Math.round(ce(m,0,255))},i=s(e),a=s(t),l=s(n);return{r:i,g:a,b:l}},Ln=(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=St(s.r,s.g,s.b,93),a=vt(i.r,i.g,i.b,180),l=pe(a.r,a.g,a.b,o);return K&&K.set(e,l),l},Mt=(e,t)=>t.reduce((n,r)=>(r in e&&(n[r]=e[r]),n),{}),On=5,wn=5,Fn=4,D=4,y=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"]},ue=Mt(d,["cyan","blue","violet","grape","pink","green","teal","yellow","orange","red"]),In=[d.black,d.red[D],d.green[D],d.blue[D],d.yellow[D]],Cn=[d.transparent,d.red[y],d.green[y],d.blue[y],d.yellow[y]],Pn=[d.white,d.red[y],d.green[y],d.blue[y],d.yellow[y]],Dn=[d.white,"#f8f9fa","#f5faff","#fffce8","#fdf8f6"],kn={transparent:d.transparent,white:d.white,gray:d.gray,black:d.black,bronze:d.bronze,...ue},Un={transparent:d.transparent,white:d.white,gray:d.gray,black:d.black,bronze:d.bronze,...ue},Nn=e=>W(e)?d.green[y]:e,Hn=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]],pe=(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},Gn=e=>{let t=c(e);if(!t.isValid())return null;let{r:n,g:r,b:o,a:s}=t.toRgb();return pe(n,r,o,s)},W=e=>c(e).getAlpha()===0,Bn=e=>c(e).getAlpha()===1,Kn=240,Rt=(e,t,n)=>(e*299+t*587+n*114)/1e3,Wn=(e,t=160)=>{if(!e)return!0;if(W(e))return!1;let n=c(e);if(!n.isValid())return!0;let{r,g:o,b:s}=n.toRgb();return Rt(r,o,s)<t},Vn=e=>{if(e=e.trim(),W(e))return e;let t=c(e);return t.isValid()?["hex","hex8"].includes(t.getFormat())&&!e.startsWith("#")?`#${e}`:e:null};p();var Xn=typeof window<"u"&&"ResizeObserver"in window,jn="Excalidraw",qn=36,Zn=10,Qn=20,Jn=8,er=5,tr=1,nr=30,rr=Math.PI/12,or="red",sr={TEXT:"text",CROSSHAIR:"crosshair",GRABBING:"grabbing",GRAB:"grab",POINTER:"pointer",MOVE:"move",AUTO:""},ar={MAIN:0,WHEEL:1,SECONDARY:2,TOUCH:-1,ERASER:5},ir={enabled:"all",disabled:"none",inheritFromUI:"var(--ui-pointerEvents)"},Lt=(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))(Lt||{}),lr={UNSTARTED:-1,ENDED:0,PLAYING:1,PAUSED:2,BUFFERING:3,CUED:5},k={TEST:"test",DEVELOPMENT:"development",PRODUCTION:"production"},cr={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"},ur={sm:16,md:20,lg:28,xl:36},fe="Xiaolai",O="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",Ot={[he]:998,[me]:999},V={[fe]:100,...Ot,[O]:1e3};function wt(e){switch(e){case T.Cascadia:case T["Comic Shanns"]:return me;default:return he}}var Ee=e=>{let t=wt(e);switch(e){case T.Excalifont:return[fe,t,O];default:return[t,O]}},pr={LIGHT:"light",DARK:"dark"},dr="invert(93%) hue-rotate(180deg)",fr={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},hr=1,mr=20,Er=T.Excalifont,Tr="left",br="top",Te="{version}",Ft=2,It=2*Ft,Ct=1e-5,gr=2*It-Ct,_r="#ffffff",xr="#1e1e1e",Ar="#a2f1a6",yr=["selectAll"],vr=20,Sr=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"},Pt={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={...Pt,"excalidraw.svg":"image/svg+xml","excalidraw.png":"image/png",binary:"application/octet-stream",...be},Mr=[de.text,de.html,...Object.values(be)],Rr={png:"png",svg:"svg",clipboard:"clipboard"},Lr={excalidraw:"excalidraw",excalidrawClipboard:"excalidraw/clipboard",excalidrawLibrary:"excalidrawlib",excalidrawClipboardWithAPI:"excalidraw-api/clipboard"},Or=()=>window.EXCALIDRAW_EXPORT_SOURCE||window.location.origin,wr=500,Fr=300,Ir=500,Cr=1e4,Pr=3e4,Dr=100,kr=.1,Ur=.1,Nr=30,Hr=300,Gr=6e4,Br=3e3,Kr={addLibrary:"addLibrary"},Wr={addLibrary:"addLibrary"},Vr={canvasActions:{changeViewBackgroundColor:!0,clearCanvas:!0,export:{saveFileToDisk:!0},loadScene:!0,saveToActiveFile:!0,toggleTheme:null,saveAsImage:!0},tools:{image:!0}},Yr=2,$r=[1,2,3],zr=10,Xr={maxWidthOrHeight:1440,maxFileSizeBytes:4*1024*1024},jr="http://www.w3.org/2000/svg",qr=`<?xml version="1.0" standalone="no"?>
1
+ var Ze=Object.create;var J=Object.defineProperty;var Qe=Object.getOwnPropertyDescriptor;var Je=Object.getOwnPropertyNames;var et=Object.getPrototypeOf,tt=Object.prototype.hasOwnProperty;var nt=(e,t)=>()=>(e&&(t=e(e=0)),t);var ee=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var rt=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Je(t))!tt.call(e,o)&&o!==n&&J(e,o,{get:()=>t[o],enumerable:!(r=Qe(t,o))||r.enumerable});return e};var te=(e,t,n)=>(n=e!=null?Ze(et(e)):{},rt(t||!e||!e.__esModule?J(n,"default",{value:e,enumerable:!0}):n,e));var h,p=nt(()=>{h={PROD:!0}});var Pe=ee((z,De)=>{p();(function(e,t){typeof define=="function"&&define.amd?define([],t):typeof z=="object"?De.exports=t():(e.PromisePool=t(),e.promisePool=e.PromisePool)})(z,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 $e=ee(K=>{"use strict";p();Object.defineProperty(K,"__esModule",{value:!0});K.sanitizeUrl=void 0;var hn=/^([^\w]*)(javascript|data|vbscript)/im,mn=/&#(\w+)(^\w|;)?/g,En=/&(newline|tab);/gi,Tn=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim,bn=/^.+(:|&colon;)/gim,gn=[".","/"];function _n(e){return gn.indexOf(e[0])>-1}function xn(e){return e.replace(mn,function(t,n){return String.fromCharCode(n)})}function An(e){var t=xn(e||"").replace(En,"").replace(Tn,"").trim();if(!t)return"about:blank";if(_n(t))return t;var n=t.match(bn);if(!n)return t;var r=n[0];return hn.test(r)?"about:blank":t}K.sanitizeUrl=An});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 Ln=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 st=/^\s+/,at=/\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=it(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 pt(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:yt[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(mt,arguments)},brighten:function(){return this._applyModification(Et,arguments)},darken:function(){return this._applyModification(Tt,arguments)},desaturate:function(){return this._applyModification(dt,arguments)},saturate:function(){return this._applyModification(ft,arguments)},greyscale:function(){return this._applyModification(ht,arguments)},spin:function(){return this._applyModification(bt,arguments)},_applyCombination:function(t,n){return t.apply(null,[this].concat([].slice.call(n)))},analogous:function(){return this._applyCombination(xt,arguments)},complement:function(){return this._applyCombination(gt,arguments)},monochromatic:function(){return this._applyCombination(At,arguments)},splitcomplement:function(){return this._applyCombination(_t,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 it(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=Rt(e)),C(e)=="object"&&(A(e.r)&&A(e.g)&&A(e.b)?(t=lt(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=ut(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=ct(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 lt(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 ct(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 ut(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 pt(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 dt(e,t){t=t===0?0:t||10;var n=c(e).toHsl();return n.s-=t/100,n.s=D(n.s),c(n)}function ft(e,t){t=t===0?0:t||10;var n=c(e).toHsl();return n.s+=t/100,n.s=D(n.s),c(n)}function ht(e){return c(e).desaturate(100)}function mt(e,t){t=t===0?0:t||10;var n=c(e).toHsl();return n.l+=t/100,n.l=D(n.l),c(n)}function Et(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 Tt(e,t){t=t===0?0:t||10;var n=c(e).toHsl();return n.l-=t/100,n.l=D(n.l),c(n)}function bt(e,t){var n=c(e).toHsl(),r=(n.h+t)%360;return n.h=r<0?360+r:r,c(n)}function gt(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 _t(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 xt(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 At(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=Ot(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"},yt=c.hexNames=vt(W);function vt(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){St(e)&&(e="100%");var n=Mt(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 D(e){return Math.min(1,Math.max(0,e))}function g(e){return parseInt(e,16)}function St(e){return typeof e=="string"&&e.indexOf(".")!=-1&&parseFloat(e)===1}function Mt(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 Rt(e){e=e.replace(st,"").replace(at,"").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 Ot(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 Lt}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=Lt(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 It=(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}},kn=(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=It(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},wt=(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)}},Un=e=>{let t=c(e),n=t.getAlpha(),r=t.toRgb(),o=fe(r.r,r.g,r.b,de),s=wt(o.r,o.g,o.b);return N(s.r,s.g,s.b,n)},Ft=(e,t)=>t.reduce((n,r)=>(r in e&&(n[r]=e[r]),n),{}),Hn=5,Gn=5,Kn=4,P=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=Ft(d,["cyan","blue","violet","grape","pink","green","teal","yellow","orange","red"]),Bn=5,Ct=[d.black,d.red[P],d.green[P],d.blue[P],d.yellow[P]],Wn=[d.transparent,d.red[v],d.green[v],d.blue[v],d.yellow[v]],Yn=[d.white,d.red[v],d.green[v],d.blue[v],d.yellow[v]],me="#ffdf6b",Vn=Ct,$n=[me,d.pink[1],d.green[1],d.blue[1],d.orange[1]],zn=[d.white,"#f8f9fa","#f5faff","#fffce8","#fdf8f6"],Xn={transparent:d.transparent,white:d.white,gray:d.gray,black:d.black,bronze:d.bronze,...he},jn={transparent:d.transparent,white:d.white,gray:d.gray,black:d.black,bronze:d.bronze,...he},qn=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},Zn=(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)},Qn=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,Jn=e=>c(e).getAlpha()===1,er=240,Dt=(e,t,n)=>(e*299+t*587+n*114)/1e3,tr=(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 Dt(r,o,s)<t},nr=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 ar=typeof window<"u"&&"ResizeObserver"in window,ir="Excalidraw",lr=36,cr=20,ur=800,pr=10,dr=20,fr=8,hr=5,mr=1,Er=30,Tr=Math.PI/12,br="red",gr={TEXT:"text",CROSSHAIR:"crosshair",GRABBING:"grabbing",GRAB:"grab",POINTER:"pointer",MOVE:"move",AUTO:""},_r={MAIN:0,WHEEL:1,SECONDARY:2,TOUCH:-1,ERASER:5},xr={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||{}),Ar={UNSTARTED:-1,ENDED:0,PLAYING:1,PAUSED:2,BUFFERING:3,CUED:5},k={TEST:"test",DEVELOPMENT:"development",PRODUCTION:"production"},yr={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"},vr={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",Nt={[ge]:998,[_e]:999},$={[be]:100,...Nt,[L]:1e3};function kt(e){switch(e){case T.Cascadia:case T["Comic Shanns"]:return _e;default:return ge}}var xe=e=>{let t=kt(e);switch(e){case T.Excalifont:return[be,t,L];default:return[t,L]}},Sr={LIGHT:"light",DARK:"dark"},Mr="invert(93%) hue-rotate(180deg)",Rr={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},Or=1,Lr=20,Ir=16,wr=512,Fr=28,Cr=2,Ut=16,Ht={height:20,fontSize:12,fontFamily:"Helvetica, Arial, sans-serif",baselineFromBottom:14,opacity:1,minBodyWidthForYear:80},Dr=Ut*2+Ht.height,Pr=250,Nr=75,kr=3,Ur=.16,Hr=.5,Gr=.08,Kr=T.Excalifont,Br=3,Wr="left",Yr="top",Ae="{version}",Gt=2,Kt=2*Gt,Bt=1e-5,Vr=2*Kt-Bt,$r="#ffffff",zr="#1e1e1e",Xr="#a2f1a6",jr=["selectAll"],qr=20,Zr=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"},Wt={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={...Wt,"excalidraw.svg":"image/svg+xml","excalidraw.png":"image/png",binary:"application/octet-stream",...ye},Qr=[Te.text,Te.html,...Object.values(ye)],Jr={png:"png",svg:"svg",clipboard:"clipboard"},eo={excalidraw:"excalidraw",excalidrawClipboard:"excalidraw/clipboard",excalidrawLibrary:"excalidrawlib",excalidrawClipboardWithAPI:"excalidraw-api/clipboard"},to=()=>window.EXCALIDRAW_EXPORT_SOURCE||window.location.origin,no=500,ro=300,oo=500,so=1e4,ao=3e4,io=100,lo=250,co=.1,uo=.1,po=30,fo=Object.freeze({value:1}),ho=300,mo=6e4,Eo=3e3,To={addLibrary:"addLibrary"},bo={addLibrary:"addLibrary"},go={canvasActions:{changeViewBackgroundColor:!0,clearCanvas:!0,export:{saveFileToDisk:!0},loadScene:!0,saveToActiveFile:!0,toggleTheme:null,saveAsImage:!0},tools:{image:!0}},_o=2,xo=[1,2,3],Ao=10,yo={maxWidthOrHeight:1440,maxFileSizeBytes:4*1024*1024},vo="http://www.w3.org/2000/svg",So=`<?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,Qr={excalidraw:2,excalidrawLibrary:2},Jr=5,eo=.7,to=11,no={TOP:"top",MIDDLE:"middle",BOTTOM:"bottom"},ro={LEFT:"left",CENTER:"center",RIGHT:"right"},oo=20,so=70,ao=.25,io=32,lo={LEGACY:1,PROPORTIONAL_RADIUS:2,ADAPTIVE_RADIUS:3},Dt={architect:0,artist:1,cartoonist:2},co=["thin","medium","bold"],ge={thin:1,medium:2,bold:4,extraBold:8},kt={thin:.5,medium:1,bold:2,extraBold:4},uo=(e,t)=>e==="freedraw"?kt[t]:ge[t],Ut="medium",po={strokeColor:d.black,backgroundColor:d.transparent,fillStyle:"solid",strokeWidth:ge[Ut],strokeStyle:"solid",roughness:Dt.artist,opacity:100,locked:!1},Nt="library",fo="search",ho={name:"default",defaultTab:Nt},mo=new Set(["iframe","embeddable","image"]),Eo={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",autoshape:"autoshape",bucketfill:"bucketfill"},To={OAI_API_KEY:"excalidraw-oai-api-key",MERMAID_TO_EXCALIDRAW:"mermaid-to-excalidraw",PUBLISH_LIBRARY:"publish-library-data"},bo="Untitled",go={generalStats:1,elementProperties:2},_o=1,xo={sharp:"sharp",round:"round",elbow:"elbow"},Ao=.3,yo="element",vo=Symbol.for("__test__originalId__"),Ht=(r=>(r.ACTIVE="active",r.AWAY="away",r.IDLE="idle",r))(Ht||{}),So=20,Mo=35,Ro=700,Lo={background:"var(--mobile-action-button-bg)"},Oo=.5,wo=.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},[V.Xiaolai]:{metrics:{unitsPerEm:1e3,ascender:880,descender:-144,lineHeight:1.25},fallback:!0},[V["Segoe UI Emoji"]]:{metrics:{unitsPerEm:1e3,ascender:886,descender:-374,lineHeight:1.25},local:!0,fallback:!0}},Po={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"},Do="local:",ko=(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},Uo=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",Wo=599,Vo=1e3,Yo=500,$o=600,zo=1180,Xo=1440,jo=1229,ve=/Mac|iPod|iPhone|iPad/.test(navigator.platform),qo=/^Win/.test(navigator.platform),Se=/\b(android)\b/i.test(navigator.userAgent),Zo=typeof window<"u"&&"netscape"in window&&navigator.userAgent.indexOf("rv:")>1&&navigator.userAgent.indexOf("Gecko")>1,Gt=navigator.userAgent.indexOf("Chrome")!==-1,Qo=!Gt&&navigator.userAgent.indexOf("Safari")!==-1,Me=/iPad|iPhone/i.test(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document,Jo=()=>navigator.brave?.isBrave?.name==="isBrave",Bt=(e,t)=>e<=599||t<500&&e<1e3,Kt=(e,t)=>{let n=Math.min(e,t),r=Math.max(e,t);return n>=600&&r<=1180},Wt=()=>{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},es=(e,t)=>Bt(e,t)?"phone":Kt(e,t)?"tablet":"desktop",ts=e=>e.formFactor==="phone"?"mobile":e.formFactor==="tablet"?"compact":e.desktopUIMode,ns=e=>{let t=e??"",n="unknown";return Me?n="ios":Se?n="android":t&&(n="other"),{isMobileDevice:Wt(),platform:n}},rs=()=>{if(typeof window>"u")return null;try{let e=window.localStorage.getItem(ye);if(e==="compact"||e==="full")return e}catch{}return null},Vt=e=>{if(!(typeof window>"u"))try{window.localStorage.setItem(ye,e)}catch{}},os=e=>{if(!(e!=="compact"&&e!=="full"))return Vt(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"},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:ve?"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",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"},Yt=new Map([[M.Z,Re.Z],[M.Y,Re.Y]]),$t=e=>/^[a-z]$/.test(e.toLowerCase()),ls=(e,t)=>{if(t===e.key.toLowerCase())return!0;let n=Yt.get(t);return!!(n&&!$t(e.key)&&e.code===n)},cs=e=>e===M.ARROW_LEFT||e===M.ARROW_RIGHT||e===M.ARROW_DOWN||e===M.ARROW_UP,us=e=>e.altKey,ps=e=>e.shiftKey,ds=e=>e.shiftKey;p();import{pointFrom as Le,pointFromPair as zt}from"@excalidraw/math";var Es=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)}},Ts=(e,t,n,r)=>{let o=n.map(v=>v[e]),s=Math.max(...o),i=Math.min(...o),a=s-i,l=a===0?1:t/a,u=1/0,m=n.map(v=>{let S=v[e]*l,I=[...v];return I[e]=S,S<u&&(u=S),I});if(!r||m.length===2)return m;let b=i-u;return m.map(v=>zt(v.map((S,I)=>I===e?S+b:S)))},bs=(e,t,n)=>n?Le(Math.round(e/n)*n,Math.round(t/n)*n):Le(e,t);p();var Ie=J(we(),1),Fe=class{pool;entries={};constructor(t,n){this.pool=new Ie.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 Ce=(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 w=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 $=null,Ps=e=>{$=e},Ds=()=>{if($)return $;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}`},ks=e=>e.charAt(0).toUpperCase()+e.slice(1),Us=e=>e instanceof HTMLElement&&e.className.includes("ToolIcon"),Xt=e=>e instanceof HTMLElement&&e.dataset.type==="wysiwyg"||e instanceof HTMLBRElement||e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement||e instanceof HTMLSelectElement,Ns=e=>Xt(e)||e instanceof Element&&!!e.closest("label, button"),Hs=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,jt=({fontFamily:e})=>{for(let[t,n]of Object.entries(T))if(n===e)return`${t}${Ee(n).map(r=>`, ${r}`).join("")}`;return O},Gs=({fontSize:e,fontFamily:t})=>`${e}px ${jt({fontFamily:t})}`,Bs=async e=>{requestAnimationFrame(()=>requestAnimationFrame(e))},Ks=(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},Ws=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},Vs=e=>1-Math.pow(1-e,4),Ys=(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},$s=e=>{let t=window.getSelection();if(t){let n=document.createRange();n.selectNodeContents(e),t.removeAllRanges(),t.addRange(n)}},zs=()=>{let e=window.getSelection();e&&e.removeAllRanges()},Xs=(e,t)=>Math.abs(e-t),js=e=>e==="selection"||e==="lasso",qs=(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},Zs=()=>document.fullscreenElement?.nodeName==="HTML",Qs=()=>document.documentElement.requestFullscreen(),Js=()=>document.exitFullscreen(),ea=({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}},ta=({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}},na=e=>getComputedStyle(document.documentElement).getPropertyValue(`--${e}`),qt="A-Za-z\xC0-\xD6\xD8-\xF6\xF8-\u02B8\u0300-\u0590\u0800-\u1FFF\u2C00-\uFB1C\uFDFE-\uFE6F\uFEFD-\uFFFF",Zt="\u0591-\u07FF\uFB1D-\uFDFD\uFE70-\uFEFC",Qt=new RegExp(`^[^${qt}]*[${Zt}]`),ra=e=>Qt.test(e),oa=e=>{let[t,n]=e;return{x:t,y:n}},sa=e=>{if(e?.name==="AbortError"){console.warn(e);return}throw e},aa=(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},ia=(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},la=(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},ca=(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},ua=()=>document.querySelector('meta[name="version"]')?.content||Te,pa=()=>{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},da=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},fa=e=>{let t=e.parentElement;for(;t;){if(t.tabIndex>-1){t.focus();return}t=t.parentElement}},ha=e=>{e.preventDefault(),e.returnValue=""},ma=e=>Array.from(e).map(t=>`0${t.toString(16)}`.slice(-2)).join(""),Ea=()=>X()?1:Date.now(),Ta=e=>e instanceof Map?e:e.reduce((t,n)=>(t.set(typeof n=="string"?n:n.id,n),t),new Map),ba=e=>e.reduce((t,n,r)=>(t.set(n.id,[n,r]),t),new Map),ga=(e,t)=>e.reduce((n,r,o)=>(n[t?t(r):o]=r,n),{}),_a=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},[]),Jt=e=>Array.isArray(e)?e:e.values(),xa=e=>Array.isArray(e)?e:Array.from(Jt(e)),X=()=>h.MODE===k.TEST,Aa=()=>h.MODE===k.DEVELOPMENT,De=()=>h.MODE===k.PRODUCTION,ya=()=>typeof process<"u"&&!0,va=(e,t)=>new CustomEvent(e,{detail:{nativeEvent:t},cancelable:!0}),Sa=(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},Ma=e=>{let t=typeof e;return e==null||t!=="object"&&t!=="function"},en=()=>{try{return window.self===window.top?"top":"iframe"}catch{return"iframe"}},Ra=()=>en()==="iframe",La=e=>!!e&&typeof e=="object"&&"then"in e&&"catch"in e&&"finally"in e,Oa=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):[]},Pe=(e,t)=>Array.isArray(e)&&Array.isArray(t)&&e.length===0&&t.length===0?!0:e===t,tn=(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]||Pe(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]||Pe(e[i],t[i]);return!l&&r&&console.warn(`%cisShallowEqual: ${i} not equal ->`,"color: #8B4000",e[i],t[i]),l})},wa=(e,t,{checkForDefaultPrevented:n=!0}={})=>function(o){if(e?.(o),!n||!o?.defaultPrevented)return t?.(o)},Fa=(e,t,n)=>{if(!t)return e;if(n)return console.error(t),e;throw new Error(t)};function Ia(e,t){if(!e)throw new Error(t)}var Ca=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},Pa=(e,t)=>e instanceof Set||e instanceof Map?e.has(t):"includes"in e?e.includes(t):e.hasOwnProperty(t),Da=e=>JSON.parse(JSON.stringify(e)),ka=(e,t)=>tn(e,t)?e:t;function Ua(e,t,n,r){return e?(e?.addEventListener?.(t,n,r),()=>{e?.removeEventListener?.(t,n,r)}):()=>{}}function Na(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 Ha=e=>e.replace(/\r?\n|\r/g,`
4
- `);function Ga(e){return e}var Ae=async(e,...t)=>new Promise(n=>{n(e(...t))}),Ba=(...e)=>Math.max(...e.map(t=>t?1:0))>0,Ka=e=>{try{return JSON.parse(e)}catch{return null}},ke=e=>e.replace(/"/g,"&quot;"),Wa=e=>Array.isArray(e)?e:[e],nn=e=>Array.isArray(e),rn=e=>nn(e)?e.length:e instanceof Map||e instanceof Set?e.size:Object.keys(e).length,Va=(e,t)=>{if(rn(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},Ue="excalidraw-feature-flags",z={COMPLEX_BINDINGS:!1},R=null,Ya=e=>{if(!R)try{let t=localStorage.getItem(Ue);t&&(R=JSON.parse(t)??z)}catch{}return(R||z)[e]},$a=(e,t)=>{try{R={...R||z,[e]:t},localStorage.setItem(Ue,JSON.stringify(R))}catch(n){console.error("unable to set feature flag",n)}},za=(e,t)=>t.includes(e);var Ne=new w(Date.now()),He=0,Ja=()=>Math.floor(Ne.next()*2**31),ei=e=>{Ne=new w(e),He=0},ti=()=>X()?`id${He++}`:Ce();p();var Be=J(Ge(),1);var hn=e=>(e=e.trim(),e&&(0,Be.sanitizeUrl)(ke(e))),ii=e=>!!(e?.includes(location.origin)||e?.startsWith("/")),li=e=>{if(e=hn(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 Ke=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(!De()&&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 We=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 F=(e,t=5)=>parseFloat(e.toPrecision(t)),mn=e=>F(e.reduce((t,n)=>t+n)/e.length),j=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,F(r.reduce((o,s)=>o+s)),r.sort((o,s)=>o-s).map(o=>F(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=F(s/e.FRAME_COUNT);console.info(t,`- ${r.length} calls - ${i}ms/frame across ${e.FRAME_COUNT} frames (${F(i/16.67*100,1)}% of frame budget)`),e.TIMES_AVG[t]={t:n,times:[],avg:o!=null?mn([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];Ve(a,l)||(s[i]={prev:a,next:l})}Object.keys(s).length>0&&console.info(`[${t}] changed:`,s)}};function Ve(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(!Ve(e[o],t[o]))return!1;return!0}export{Br as ACTIVE_THRESHOLD,Mr as ALLOWED_PASTE_MIME_TYPES,jn as APP_NAME,to as ARROW_LABEL_FONT_SIZE_TO_MIN_WIDTH_RATIO,eo as ARROW_LABEL_WIDTH_FRACTION,xo as ARROW_TYPE,Ke as AppEventBus,Ro as BIND_MODE_TIMEOUT,Jr as BOUND_TEXT_PADDING,Pn as BUCKET_FILL_BACKGROUND_PICKS,ee as BinaryHeap,yr as CANVAS_ONLY_ACTIONS,fo as CANVAS_SEARCH_TAB,fe as CJK_HAND_DRAWN_FALLBACK_FONT,cr as CLASSES,Re as CODES,wn as COLORS_PER_ROW,xr as COLOR_CHARCOAL_BLACK,Kn as COLOR_OUTLINE_CONTRAST_THRESHOLD,d as COLOR_PALETTE,Ar as COLOR_VOICE_CALL,_r as COLOR_WHITE,sr as CURSOR_TYPE,dr as DARK_THEME_FILTER,io as DEFAULT_ADAPTIVE_RADIUS,Dn as DEFAULT_CANVAS_BACKGROUND_PICKS,Fn as DEFAULT_CHART_COLOR_INDEX,gr as DEFAULT_COLLISION_THRESHOLD,y as DEFAULT_ELEMENT_BACKGROUND_COLOR_INDEX,Un as DEFAULT_ELEMENT_BACKGROUND_COLOR_PALETTE,Cn as DEFAULT_ELEMENT_BACKGROUND_PICKS,po as DEFAULT_ELEMENT_PROPS,D as DEFAULT_ELEMENT_STROKE_COLOR_INDEX,kn as DEFAULT_ELEMENT_STROKE_COLOR_PALETTE,In as DEFAULT_ELEMENT_STROKE_PICKS,Ut as DEFAULT_ELEMENT_STROKE_WIDTH_KEY,zr as DEFAULT_EXPORT_PADDING,bo as DEFAULT_FILENAME,Er as DEFAULT_FONT_FAMILY,mr as DEFAULT_FONT_SIZE,vr as DEFAULT_GRID_SIZE,Sr as DEFAULT_GRID_STEP,Xr as DEFAULT_IMAGE_OPTIONS,or as DEFAULT_LASER_COLOR,ao as DEFAULT_PROPORTIONAL_RADIUS,Ao as DEFAULT_REDUCED_GLOBAL_ALPHA,ho as DEFAULT_SIDEBAR,Oo as DEFAULT_STROKE_STREAMLINE,wo as DEFAULT_STROKE_STREAMLINE_PRECISE,Tr as DEFAULT_TEXT_ALIGN,Ft as DEFAULT_TRANSFORM_HANDLE_SPACING,Vr as DEFAULT_UI_OPTIONS,Te as DEFAULT_VERSION,br as DEFAULT_VERTICAL_ALIGN,Mo as DOUBLE_TAP_POSITION_THRESHOLD,Zn as DRAGGING_THRESHOLD,j as Debug,To as EDITOR_LS_KEYS,yo as ELEMENT_LINK_KEY,so as ELEMENT_PENDING_DRAW_SHAPE_OPACITY,oo as ELEMENT_READY_TO_ERASE_OPACITY,er as ELEMENT_SHIFT_TRANSLATE_AMOUNT,tr as ELEMENT_TRANSLATE_AMOUNT,Zr as ENCRYPTION_KEY_BITS,k as ENV,Ct as EPSILON,Lt as EVENT,Lr as EXPORT_DATA_TYPES,Rr as EXPORT_IMAGE_TYPES,$r as EXPORT_SCALES,G as Emitter,T as FONT_FAMILY,V as FONT_FAMILY_FALLBACKS,Ot as FONT_FAMILY_GENERIC_FALLBACKS,U as FONT_METADATA,ur as FONT_SIZES,fr as FRAME_STYLE,kt as FREEDRAW_STROKE_WIDTH,Po as GOOGLE_FONTS_RANGES,Hr as HYPERLINK_TOOLTIP_DELAY,Gr as IDLE_THRESHOLD,be as IMAGE_MIME_TYPES,wr as IMAGE_RENDER_TIMEOUT,M as KEYS,Yt as KeyCodeMap,mo as LIBRARY_DISABLED_TYPES,Nt as LIBRARY_SIDEBAR_TAB,Jn as LINE_CONFIRM_THRESHOLD,So as LINE_POLYGON_POINT_MERGE_DISTANCE,Do as LOCAL_FONT_PROTOCOL,On as MAX_CUSTOM_COLORS_USED_IN_CANVAS,Yr as MAX_DECIMALS_FOR_SVG_EXPORT,Nr as MAX_ZOOM,de as MIME_TYPES,Qn as MINIMUM_ARROW_SIZE,hr as MIN_FONT_SIZE,_o as MIN_WIDTH_OR_HEIGHT,Ur as MIN_ZOOM,Lo as MOBILE_ACTION_BUTTON_BG,me as MONOSPACE_GENERIC_FONT,Yo as MQ_MAX_HEIGHT_LANDSCAPE,Wo as MQ_MAX_MOBILE,zo as MQ_MAX_TABLET,Vo as MQ_MAX_WIDTH_LANDSCAPE,$o as MQ_MIN_TABLET,Xo as MQ_MIN_WIDTH_DESKTOP,jo as MQ_RIGHT_SIDEBAR_MIN_WIDTH,vo as ORIG_ID,ar as POINTER_BUTTON,ir as POINTER_EVENTS,Fe as PromisePool,_e as Queue,Dt as ROUGHNESS,lo as ROUNDNESS,he as SANS_SERIF_GENERIC_FONT,Dr as SCROLL_TIMEOUT,rr as SHIFT_LOCKING_ANGLE,It as SIDE_RESIZING_THRESHOLD,go as STATS_PANELS,Pt as STRING_MIME_TYPES,ge as STROKE_WIDTH,co as STROKE_WIDTH_KEYS,qr as SVG_DOCUMENT_PREAMBLE,jr as SVG_NS,Fr as TAP_TWICE_TIMEOUT,ro as TEXT_ALIGN,qn as TEXT_AUTOWRAP_THRESHOLD,nr as TEXT_TO_CENTER_SNAP_THRESHOLD,pr as THEME,Cr as TITLE_TIMEOUT,Eo as TOOL_TYPE,Ir as TOUCH_CTX_MENU_TIMEOUT,Wr as URL_HASH_KEYS,Kr as URL_QUERY_KEYS,Ht as UserIdleState,Qr as VERSIONS,Pr as VERSION_TIMEOUT,no as VERTICAL_ALIGN,We as VersionedSnapshotStore,O as WINDOWS_EMOJI_FALLBACK_FONT,lr as YOUTUBE_STATES,kr as ZOOM_STEP,Ua as addEventListener,Qs as allowFullScreen,Ln as applyDarkModeFilter,_a as arrayToList,Ta as arrayToMap,ba as arrayToMapWithIndex,ga as arrayToObject,Fa as assertNever,ma as bytesToHexString,ks as capitalizeString,Wa as castArray,Ys as chunk,Da as cloneJSON,Gn as colorToHex,wa as composeEventHandlers,ns as createUserAgentDescriptor,Ks as debounce,ts as deriveStylesPanelMode,Xs as distance,Vs as easeOut,ke as escapeDoubleQuotes,Js as exitFullScreen,aa as findIndex,ia as findLastIndex,fa as focusNearestParent,Hn as getAllColorsSpecificShade,Nn as getBucketFillBackgroundColor,Ds as getDateTime,Or as getExportSource,Ya as getFeatureFlag,Ee as getFontFamilyFallbacks,jt as getFontFamilyString,Gs as getFontString,es as getFormFactor,en as getFrame,wt as getGenericFontFamilyFallback,na as getGlobalCSSVariable,bs as getGridPoint,Uo as getLineHeight,da as getNearestScrollableContainer,Es as getSizeFromPoints,uo as getStrokeWidthByKey,Na as getSvgPathFromStroke,Ea as getUpdatedTimestamp,ua as getVersion,ko as getVerticalOffset,Ia as invariant,Se as isAndroid,Ba as isAnyTrue,cs as isArrowKey,_n as isBounds,Jo as isBrave,Gt as isChrome,Wn as isColorDark,ve as isDarwin,Aa as isDevEnv,Zo as isFirefox,Zs as isFullScreen,Me as isIOS,Xt as isInputLike,Ns as isInteractive,$t as isLatinChar,ii as isLocalLink,Pa as isMemberOf,Bt as isMobileBreakpoint,Bn as isOpaqueColor,Ma as isPrimitive,De as isProdEnv,La as isPromiseLike,ra as isRTL,nn as isReadonlyArray,Ra as isRunningInIframe,Qo as isSafari,js as isSelectionLikeTool,ya as isServerEnv,tn as isShallowEqual,Kt as isTabletBreakpoint,X as isTestEnv,Us as isToolIcon,W as isTransparent,qo as isWindows,Hs as isWritableElement,rs as loadDesktopUIModePreference,la as mapFind,ls as matchKey,Ca as memoize,sa as muteFSAbortError,ca as nFormatter,Bs as nextAnimationFrame,Ha as normalizeEOL,Vn as normalizeInputColor,hn as normalizeLink,za as oneOf,ha as preventUnload,Ae as promiseTry,Oa as queryFocusableElements,ti as randomId,Ja as randomInteger,Va as reduceToCommonValue,zs as removeSelection,Ts as rescalePoints,ei as reseed,xe as resolvablePromise,pe as rgbToHex,Ka as safelyParseJSON,ta as sceneCoordsToViewportCoords,$s as selectNode,Ps as setDateTimeForTests,os as setDesktopUIMode,$a as setFeatureFlag,ps as shouldMaintainAspectRatio,us as shouldResizeFromCenter,ds as shouldRotateWithDiscreteAngle,rn as sizeOf,pa as supportsEmoji,Xn as supportsResizeObserver,Ws as throttleRAF,xa as toArray,Ga as toBrandedType,Jt as toIterable,li as toValidURL,oa as tupleToCoors,qs as updateActiveTool,Sa as updateObject,ka as updateStable,ea as viewportCoordsToSceneCoords,va as wrapEvent};
3
+ `,Mo=128,Ro={excalidraw:2,excalidrawLibrary:2},Oo=5,Lo=.7,Io=11,wo={TOP:"top",MIDDLE:"middle",BOTTOM:"bottom"},Fo={LEFT:"left",CENTER:"center",RIGHT:"right"},Co=20,Do=70,Po=.25,No=32,ko={LEGACY:1,PROPORTIONAL_RADIUS:2,ADAPTIVE_RADIUS:3},Yt={architect:0,artist:1,cartoonist:2},Uo=["thin","medium","bold"],ve={thin:1,medium:2,bold:4,extraBold:8},Vt={thin:.5,medium:1,bold:2,extraBold:4},Ho=(e,t)=>e==="freedraw"?Vt[t]:ve[t],$t="medium",Go={strokeColor:d.black,backgroundColor:d.transparent,fillStyle:"solid",strokeWidth:ve[$t],strokeStyle:"solid",roughness:Yt.artist,opacity:100,locked:!1},zt="library",Ko="search",Bo={name:"default",defaultTab:zt},Wo=new Set(["iframe","embeddable","image"]),Yo={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"},Vo={OAI_API_KEY:"excalidraw-oai-api-key",MERMAID_TO_EXCALIDRAW:"mermaid-to-excalidraw",PUBLISH_LIBRARY:"publish-library-data"},$o="Untitled",zo={generalStats:1,elementProperties:2},Xo=1,jo={sharp:"sharp",round:"round",elbow:"elbow"},qo=.3,Zo="element",Qo=Symbol.for("__test__originalId__"),Xt=(r=>(r.ACTIVE="active",r.AWAY="away",r.IDLE="idle",r))(Xt||{}),Jo=20,es=35,ts=700,ns={background:"var(--mobile-action-button-bg)"},rs=.5,os=.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},[$.Xiaolai]:{metrics:{unitsPerEm:1e3,ascender:880,descender:-144,lineHeight:1.25},fallback:!0},[$["Segoe UI Emoji"]]:{metrics:{unitsPerEm:1e3,ascender:886,descender:-374,lineHeight:1.25},local:!0,fallback:!0}},cs={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"},us="local:",ps=(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},ds=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",bs=599,gs=1e3,_s=500,xs=600,As=1180,ys=1440,vs=1229,Le=/Mac|iPod|iPhone|iPad/.test(navigator.platform),Ss=/^Win/.test(navigator.platform),Ie=/\b(android)\b/i.test(navigator.userAgent),Ms=typeof window<"u"&&"netscape"in window&&navigator.userAgent.indexOf("rv:")>1&&navigator.userAgent.indexOf("Gecko")>1,jt=navigator.userAgent.indexOf("Chrome")!==-1,Rs=!jt&&navigator.userAgent.indexOf("Safari")!==-1,we=/iPad|iPhone/i.test(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document,Os=()=>navigator.brave?.isBrave?.name==="isBrave",qt=(e,t)=>e<=599||t<500&&e<1e3,Zt=(e,t)=>{let n=Math.min(e,t),r=Math.max(e,t);return n>=600&&r<=1180},Qt=()=>{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},Ls=(e,t)=>qt(e,t)?"phone":Zt(e,t)?"tablet":"desktop",Is=e=>e.formFactor==="phone"?"mobile":e.formFactor==="tablet"?"compact":e.desktopUIMode,ws=e=>{let t=e??"",n="unknown";return we?n="ios":Ie?n="android":t&&(n="other"),{isMobileDevice:Qt(),platform:n}},Fs=()=>{if(typeof window>"u")return null;try{let e=window.localStorage.getItem(Oe);if(e==="compact"||e==="full")return e}catch{}return null},Jt=e=>{if(!(typeof window>"u"))try{window.localStorage.setItem(Oe,e)}catch{}},Cs=e=>{if(!(e!=="compact"&&e!=="full"))return Jt(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"},en=new Map([[M.Z,Fe.Z],[M.Y,Fe.Y]]),tn=e=>/^[a-z]$/.test(e.toLowerCase()),ks=(e,t)=>{if(t===e.key.toLowerCase())return!0;let n=en.get(t);return!!(n&&!tn(e.key)&&e.code===n)},Us=e=>e===M.ARROW_LEFT||e===M.ARROW_RIGHT||e===M.ARROW_DOWN||e===M.ARROW_UP,Hs=e=>e.altKey,Gs=e=>e.shiftKey,Ks=e=>e.shiftKey;p();import{pointFrom as Ce,pointFromPair as nn}from"@excalidraw/math";var Vs=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)}},$s=(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=>nn(y.map((S,F)=>F===e?S+b:S)))},zs=(e,t,n)=>n?Ce(Math.round(e/n)*n,Math.round(t/n)*n):Ce(e,t);p();var ke=te(Pe(),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,ca=e=>{X=e},ua=()=>{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}`},pa=e=>e.charAt(0).toUpperCase()+e.slice(1),G=e=>e?.ownerDocument?.defaultView??(typeof window>"u"?null:window),da=e=>{let t=G(e);return!!t&&e instanceof t.HTMLElement&&e.className.includes("ToolIcon")},rn=e=>{let t=G(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)},fa=e=>{let t=G(e);return rn(e)||!!t&&e instanceof t.Element&&!!e.closest("label, button")},ha=e=>{let t=G(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)},on=({fontFamily:e})=>{for(let[t,n]of Object.entries(T))if(n===e)return`${t}${xe(n).map(r=>`, ${r}`).join("")}`;return L},ma=({fontSize:e,fontFamily:t})=>`${e}px ${on({fontFamily:t})}`,Ea=async e=>{requestAnimationFrame(()=>requestAnimationFrame(e))},Ta=(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},ba=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},ga=e=>1-Math.pow(1-e,4),_a=(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},xa=e=>{let t=window.getSelection();if(t){let n=document.createRange();n.selectNodeContents(e),t.removeAllRanges(),t.addRange(n)}},Aa=()=>{let e=window.getSelection();e&&e.removeAllRanges()},ya=(e,t)=>Math.abs(e-t),va=e=>e==="selection"||e==="lasso",Sa=(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},Ma=()=>document.fullscreenElement?.nodeName==="HTML",Ra=()=>document.documentElement.requestFullscreen(),Oa=()=>document.exitFullscreen(),La=({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}},Ia=({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}},wa=e=>getComputedStyle(document.documentElement).getPropertyValue(`--${e}`),sn="A-Za-z\xC0-\xD6\xD8-\xF6\xF8-\u02B8\u0300-\u0590\u0800-\u1FFF\u2C00-\uFB1C\uFDFE-\uFE6F\uFEFD-\uFFFF",Ge="\u0591-\u07FF\uFB1D-\uFDFD\uFE70-\uFEFC",an=new RegExp(`^[^${sn}]*[${Ge}]`),Fa=e=>an.test(e),ln=new RegExp(`[${Ge}]`),Ca=e=>ln.test(e),Da=e=>{let[t,n]=e;return{x:t,y:n}},Pa=e=>{if(e?.name==="AbortError"){console.warn(e);return}throw e},Na=(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},ka=(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},Ua=(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},Ha=(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},Ga=()=>document.querySelector('meta[name="version"]')?.content||Ae,Ka=()=>{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},Ba=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},Wa=e=>{let t=e.parentElement;for(;t;){if(t.tabIndex>-1){t.focus();return}t=t.parentElement}},Ya=e=>{e.preventDefault(),e.returnValue=""},Va=e=>Array.from(e).map(t=>`0${t.toString(16)}`.slice(-2)).join(""),$a=()=>q()?1:Date.now(),za=e=>e instanceof Map?e:e.reduce((t,n)=>(t.set(typeof n=="string"?n:n.id,n),t),new Map),Xa=e=>e.reduce((t,n,r)=>(t.set(n.id,[n,r]),t),new Map),ja=(e,t)=>e.reduce((n,r,o)=>(n[t?t(r):o]=r,n),{}),qa=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},[]),cn=e=>Array.isArray(e)?e:e.values(),Za=e=>Array.isArray(e)?e:Array.from(cn(e)),q=()=>h.MODE===k.TEST,Qa=()=>h.MODE===k.DEVELOPMENT,Ke=()=>h.MODE===k.PRODUCTION,Ja=()=>typeof process<"u"&&!0,ei=(e,t)=>new CustomEvent(e,{detail:{nativeEvent:t},cancelable:!0}),ti=(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},ni=e=>{let t=typeof e;return e==null||t!=="object"&&t!=="function"},un=()=>{try{return window.self===window.top?"top":"iframe"}catch{return"iframe"}},ri=()=>un()==="iframe",oi=e=>!!e&&typeof e=="object"&&"then"in e&&"catch"in e&&"finally"in e,si=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,pn=(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})},ai=(e,t,{checkForDefaultPrevented:n=!0}={})=>function(o){if(e?.(o),!n||!o?.defaultPrevented)return t?.(o)},ii=(e,t,n)=>{if(!t)return e;if(n)return console.error(t),e;throw new Error(t)};function li(e,t){if(!e)throw new Error(t)}var ci=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},ui=(e,t)=>e instanceof Set||e instanceof Map?e.has(t):"includes"in e?e.includes(t):e.hasOwnProperty(t),pi=e=>JSON.parse(JSON.stringify(e)),di=(e,t)=>pn(e,t)?e:t;function fi(e,t,n,r){return e?(e?.addEventListener?.(t,n,r),()=>{e?.removeEventListener?.(t,n,r)}):()=>{}}function hi(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 mi=e=>e.replace(/\r?\n|\r/g,`
4
+ `);function Ei(e){return e}var Re=async(e,...t)=>new Promise(n=>{n(e(...t))}),Ti=(...e)=>Math.max(...e.map(t=>t?1:0))>0,bi=e=>{try{return JSON.parse(e)}catch{return null}},Be=e=>e.replace(/"/g,"&quot;"),gi=e=>Array.isArray(e)?e:[e],dn=e=>Array.isArray(e),fn=e=>dn(e)?e.length:e instanceof Map||e instanceof Set?e.size:Object.keys(e).length,_i=(e,t)=>{if(fn(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},We="excalidraw-feature-flags",j={COMPLEX_BINDINGS:!1},R=null,xi=e=>{if(!R)try{let t=localStorage.getItem(We);t&&(R=JSON.parse(t)??j)}catch{}return(R||j)[e]},Ai=(e,t)=>{try{R={...R||j,[e]:t},localStorage.setItem(We,JSON.stringify(R))}catch(n){console.error("unable to set feature flag",n)}},yi=(e,t)=>t.includes(e);var Ye=new I(Date.now()),Ve=0,Li=()=>Math.floor(Ye.next()*2**31),Ii=e=>{Ye=new I(e),Ve=0},wi=()=>q()?`id${Ve++}`:Ue(),Fi=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($e(),1);var yn=e=>(e=e.trim(),e&&(0,ze.sanitizeUrl)(Be(e))),Ui=e=>!!(e?.includes(location.origin)||e?.startsWith("/")),Hi=e=>{if(e=yn(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 Xe=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 je=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)),vn=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?vn([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];qe(a,l)||(s[i]={prev:a,next:l})}Object.keys(s).length>0&&console.info(`[${t}] changed:`,s)}};function qe(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(!qe(e[o],t[o]))return!1;return!0}export{Eo as ACTIVE_THRESHOLD,Qr as ALLOWED_PASTE_MIME_TYPES,ir as APP_NAME,Io as ARROW_LABEL_FONT_SIZE_TO_MIN_WIDTH_RATIO,Lo as ARROW_LABEL_WIDTH_FRACTION,jo as ARROW_TYPE,Xe as AppEventBus,ts as BIND_MODE_TIMEOUT,Oo as BOUND_TEXT_PADDING,Yn as BUCKET_FILL_BACKGROUND_PICKS,ne as BinaryHeap,jr as CANVAS_ONLY_ACTIONS,Ko as CANVAS_SEARCH_TAB,be as CJK_HAND_DRAWN_FALLBACK_FONT,yr as CLASSES,Fe as CODES,Gn as COLORS_PER_ROW,zr as COLOR_CHARCOAL_BLACK,er as COLOR_OUTLINE_CONTRAST_THRESHOLD,d as COLOR_PALETTE,Bn as COLOR_TOP_PICKS_SLOTS,Xr as COLOR_VOICE_CALL,$r as COLOR_WHITE,gr as CURSOR_TYPE,Mr as DARK_THEME_FILTER,No as DEFAULT_ADAPTIVE_RADIUS,zn as DEFAULT_CANVAS_BACKGROUND_PICKS,Kn as DEFAULT_CHART_COLOR_INDEX,Vr as DEFAULT_COLLISION_THRESHOLD,v as DEFAULT_ELEMENT_BACKGROUND_COLOR_INDEX,jn as DEFAULT_ELEMENT_BACKGROUND_COLOR_PALETTE,Wn as DEFAULT_ELEMENT_BACKGROUND_PICKS,Go as DEFAULT_ELEMENT_PROPS,P as DEFAULT_ELEMENT_STROKE_COLOR_INDEX,Xn as DEFAULT_ELEMENT_STROKE_COLOR_PALETTE,Ct as DEFAULT_ELEMENT_STROKE_PICKS,$t as DEFAULT_ELEMENT_STROKE_WIDTH_KEY,Ao as DEFAULT_EXPORT_PADDING,$o as DEFAULT_FILENAME,Kr as DEFAULT_FONT_FAMILY,Lr as DEFAULT_FONT_SIZE,qr as DEFAULT_GRID_SIZE,Zr as DEFAULT_GRID_STEP,yo as DEFAULT_IMAGE_OPTIONS,br as DEFAULT_LASER_COLOR,Po as DEFAULT_PROPORTIONAL_RADIUS,qo as DEFAULT_REDUCED_GLOBAL_ALPHA,Bo as DEFAULT_SIDEBAR,me as DEFAULT_STICKY_NOTE_BG,Pr as DEFAULT_STICKY_NOTE_SIZE,rs as DEFAULT_STROKE_STREAMLINE,os as DEFAULT_STROKE_STREAMLINE_PRECISE,Wr as DEFAULT_TEXT_ALIGN,Gt as DEFAULT_TRANSFORM_HANDLE_SPACING,go as DEFAULT_UI_OPTIONS,Ae as DEFAULT_VERSION,Yr as DEFAULT_VERTICAL_ALIGN,fo as DEFAULT_ZOOM,es as DOUBLE_TAP_POSITION_THRESHOLD,pr as DRAGGING_THRESHOLD,Z as Debug,Vo as EDITOR_LS_KEYS,Zo as ELEMENT_LINK_KEY,Do as ELEMENT_PENDING_DRAW_SHAPE_OPACITY,Co as ELEMENT_READY_TO_ERASE_OPACITY,hr as ELEMENT_SHIFT_TRANSLATE_AMOUNT,mr as ELEMENT_TRANSLATE_AMOUNT,Mo as ENCRYPTION_KEY_BITS,k as ENV,Bt as EPSILON,Pt as EVENT,eo as EXPORT_DATA_TYPES,Jr as EXPORT_IMAGE_TYPES,xo as EXPORT_SCALES,B as Emitter,T as FONT_FAMILY,$ as FONT_FAMILY_FALLBACKS,Nt as FONT_FAMILY_GENERIC_FALLBACKS,U as FONT_METADATA,vr as FONT_SIZES,Br as FONT_TOP_PICKS_SLOTS,Rr as FRAME_STYLE,Vt as FREEDRAW_STROKE_WIDTH,cs as GOOGLE_FONTS_RANGES,ho as HYPERLINK_TOOLTIP_DELAY,mo as IDLE_THRESHOLD,ye as IMAGE_MIME_TYPES,no as IMAGE_RENDER_TIMEOUT,M as KEYS,en as KeyCodeMap,Wo as LIBRARY_DISABLED_TYPES,zt as LIBRARY_SIDEBAR_TAB,fr as LINE_CONFIRM_THRESHOLD,Jo as LINE_POLYGON_POINT_MERGE_DISTANCE,us as LOCAL_FONT_PROTOCOL,Hn as MAX_CUSTOM_COLORS_USED_IN_CANVAS,_o as MAX_DECIMALS_FOR_SVG_EXPORT,po as MAX_ZOOM,Te as MIME_TYPES,dr as MINIMUM_ARROW_SIZE,Or as MIN_FONT_SIZE,Xo as MIN_WIDTH_OR_HEIGHT,uo as MIN_ZOOM,ns as MOBILE_ACTION_BUTTON_BG,_e as MONOSPACE_GENERIC_FONT,_s as MQ_MAX_HEIGHT_LANDSCAPE,bs as MQ_MAX_MOBILE,As as MQ_MAX_TABLET,gs as MQ_MAX_WIDTH_LANDSCAPE,xs as MQ_MIN_TABLET,ys as MQ_MIN_WIDTH_DESKTOP,vs as MQ_RIGHT_SIDEBAR_MIN_WIDTH,Qo as ORIG_ID,_r as POINTER_BUTTON,xr as POINTER_EVENTS,Ne as PromisePool,Se as Queue,Yt as ROUGHNESS,ko as ROUNDNESS,ge as SANS_SERIF_GENERIC_FONT,io as SCROLL_TIMEOUT,Tr as SHIFT_LOCKING_ANGLE,Kt as SIDE_RESIZING_THRESHOLD,zo as STATS_PANELS,$n as STICKY_NOTE_BACKGROUND_PICKS,Dr as STICKY_NOTE_BODY_INSET_Y,Gr as STICKY_NOTE_EDGE_SHADOW_OPACITY,Hr as STICKY_NOTE_EDGE_SHADOW_WIDTH,Fr as STICKY_NOTE_FALLBACK_FONT_SIZE,Cr as STICKY_NOTE_FONT_STEP,Ht as STICKY_NOTE_FOOTER,wr as STICKY_NOTE_MAX_FONT_SIZE,Ir as STICKY_NOTE_MIN_FONT_SIZE,Nr as STICKY_NOTE_MIN_SIZE,Ut as STICKY_NOTE_PADDING,kr as STICKY_NOTE_SHADOW_OFFSET,Ur as STICKY_NOTE_SHADOW_OPACITY,Vn as STICKY_NOTE_STROKE_PICKS,Wt as STRING_MIME_TYPES,ve as STROKE_WIDTH,Uo as STROKE_WIDTH_KEYS,So as SVG_DOCUMENT_PREAMBLE,vo as SVG_NS,ro as TAP_TWICE_TIMEOUT,Fo as TEXT_ALIGN,lr as TEXT_AUTOWRAP_THRESHOLD,ur as TEXT_MAX_WRAP_WIDTH,Er as TEXT_TO_CENTER_SNAP_THRESHOLD,cr as TEXT_VIEWPORT_PADDING,Sr as THEME,so as TITLE_TIMEOUT,Yo as TOOL_TYPE,oo as TOUCH_CTX_MENU_TIMEOUT,bo as URL_HASH_KEYS,To as URL_QUERY_KEYS,Xt as UserIdleState,Ro as VERSIONS,ao as VERSION_TIMEOUT,wo as VERTICAL_ALIGN,je as VersionedSnapshotStore,L as WINDOWS_EMOJI_FALLBACK_FONT,Ar as YOUTUBE_STATES,lo as ZEN_MODE_TRANSITION_DURATION,co as ZOOM_STEP,fi as addEventListener,Ra as allowFullScreen,kn as applyDarkModeFilter,qa as arrayToList,za as arrayToMap,Xa as arrayToMapWithIndex,ja as arrayToObject,ii as assertNever,Va as bytesToHexString,pa as capitalizeString,gi as castArray,_a as chunk,pi as cloneJSON,Qn as colorToHex,ai as composeEventHandlers,ws as createUserAgentDescriptor,Ta as debounce,Is as deriveStylesPanelMode,ya as distance,ga as easeOut,Be as escapeDoubleQuotes,Oa as exitFullScreen,Na as findIndex,ka as findLastIndex,Wa as focusNearestParent,qn as getAllColorsSpecificShade,ua as getDateTime,to as getExportSource,xi as getFeatureFlag,xe as getFontFamilyFallbacks,on as getFontFamilyString,ma as getFontString,Ls as getFormFactor,un as getFrame,kt as getGenericFontFamilyFallback,wa as getGlobalCSSVariable,zs as getGridPoint,ds as getLineHeight,Ba as getNearestScrollableContainer,Vs as getSizeFromPoints,Ho as getStrokeWidthByKey,hi as getSvgPathFromStroke,$a as getUpdatedTimestamp,Ga as getVersion,ps as getVerticalOffset,Ca as hasRTLChars,li as invariant,Ie as isAndroid,Ti as isAnyTrue,Us as isArrowKey,Ln as isBounds,Os as isBrave,jt as isChrome,tr as isColorDark,Le as isDarwin,Qa as isDevEnv,Ms as isFirefox,Ma as isFullScreen,we as isIOS,rn as isInputLike,fa as isInteractive,tn as isLatinChar,Ui as isLocalLink,ui as isMemberOf,qt as isMobileBreakpoint,Jn as isOpaqueColor,ni as isPrimitive,Ke as isProdEnv,oi as isPromiseLike,Fa as isRTL,dn as isReadonlyArray,ri as isRunningInIframe,Rs as isSafari,va as isSelectionLikeTool,Ja as isServerEnv,pn as isShallowEqual,Zt as isTabletBreakpoint,q as isTestEnv,da as isToolIcon,Ee as isTransparent,Ss as isWindows,ha as isWritableElement,Fs as loadDesktopUIModePreference,Ua as mapFind,ks as matchKey,ci as memoize,Pa as muteFSAbortError,Ha as nFormatter,Ea as nextAnimationFrame,mi as normalizeEOL,nr as normalizeInputColor,yn as normalizeLink,yi as oneOf,Ya as preventUnload,Re as promiseTry,si as queryFocusableElements,wi as randomId,Li as randomInteger,_i as reduceToCommonValue,Un as removeDarkModeFilter,Aa as removeSelection,$s as rescalePoints,Ii as reseed,Me as resolvablePromise,N as rgbToHex,bi as safelyParseJSON,Ia as sceneCoordsToViewportCoords,Fi as seededRandom,xa as selectNode,Zn as setColorAlpha,ca as setDateTimeForTests,Cs as setDesktopUIMode,Ai as setFeatureFlag,Gs as shouldMaintainAspectRatio,Hs as shouldResizeFromCenter,Ks as shouldRotateWithDiscreteAngle,fn as sizeOf,Ka as supportsEmoji,ar as supportsResizeObserver,ba as throttleRAF,Za as toArray,Ei as toBrandedType,cn as toIterable,Hi as toValidURL,Da as tupleToCoors,Sa as updateActiveTool,ti as updateObject,di as updateStable,La as viewportCoordsToSceneCoords,ei 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,9 +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;
33
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;
34
42
  export declare const DEFAULT_CANVAS_BACKGROUND_PICKS: ColorTuple;
35
43
  export declare const DEFAULT_ELEMENT_STROKE_COLOR_PALETTE: {
36
44
  readonly cyan: readonly ["#e3fafc", "#99e9f2", "#3bc9db", "#15aabf", "#0c8599"];
@@ -66,15 +74,13 @@ export declare const DEFAULT_ELEMENT_BACKGROUND_COLOR_PALETTE: {
66
74
  readonly black: "#1e1e1e";
67
75
  readonly bronze: readonly ["#f8f1ee", "#eaddd7", "#d2bab0", "#a18072", "#846358"];
68
76
  };
69
- /**
70
- * The color the bucket fill tool actually fills with: the shared
71
- * `currentItemBackgroundColor`, falling back to green when that is
72
- * transparent (the tool's picker doesn't offer transparent, but the shared
73
- * state can hold it from the generic shape picker).
74
- */
75
- export declare const getBucketFillBackgroundColor: (backgroundColor: string) => string;
76
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")[];
77
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;
78
84
  /**
79
85
  * @returns #RRGGBB or #RRGGBBAA based on color containing non-opaque alpha,
80
86
  * null if not valid color
@@ -1,8 +1,11 @@
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;
7
+ export declare const TEXT_VIEWPORT_PADDING = 20;
8
+ export declare const TEXT_MAX_WRAP_WIDTH = 800;
6
9
  export declare const DRAGGING_THRESHOLD = 10;
7
10
  export declare const MINIMUM_ARROW_SIZE = 20;
8
11
  export declare const LINE_CONFIRM_THRESHOLD = 8;
@@ -52,6 +55,7 @@ export declare enum EVENT {
52
55
  POINTER_MOVE = "pointermove",
53
56
  POINTER_DOWN = "pointerdown",
54
57
  POINTER_UP = "pointerup",
58
+ POINTER_CANCEL = "pointercancel",
55
59
  STATE_CHANGE = "statechange",
56
60
  WHEEL = "wheel",
57
61
  TOUCH_START = "touchstart",
@@ -150,7 +154,53 @@ export declare const FRAME_STYLE: {
150
154
  };
151
155
  export declare const MIN_FONT_SIZE = 1;
152
156
  export declare const DEFAULT_FONT_SIZE = 20;
157
+ export declare const STICKY_NOTE_MIN_FONT_SIZE = 16;
158
+ export declare const STICKY_NOTE_MAX_FONT_SIZE = 512;
159
+ export declare const STICKY_NOTE_FALLBACK_FONT_SIZE = 28;
160
+ export declare const STICKY_NOTE_FONT_STEP = 2;
161
+ export declare const STICKY_NOTE_PADDING = 16;
162
+ /**
163
+ * The creation-date footer: a 20px text row under the label body plus a 12px
164
+ * gap above it, inside the note's bottom padding. Reserved for every note —
165
+ * also when `created` is unknown — so geometry never depends on data
166
+ * availability. The label is chosen by width bucket, never measured, so
167
+ * painting stays measurement-free (the server has no text measurer):
168
+ * `minBodyWidthForYear` is the worst case ("30 May 2026") in the system sans
169
+ * stack at 12px, with margin for wider fallbacks such as DejaVu Sans.
170
+ */
171
+ /**
172
+ * The creation-date footer of a sticky note. The label body ends `height`
173
+ * above the note's bottom padding, and the date's baseline sits
174
+ * `baselineFromBottom` above the note's bottom edge — so the 12px glyphs
175
+ * (~9px above the baseline, ~3px below) end up roughly 11px from the edge
176
+ * with a ~13px gap to the label body above them.
177
+ */
178
+ export declare const STICKY_NOTE_FOOTER: {
179
+ readonly height: 20;
180
+ readonly fontSize: 12;
181
+ readonly fontFamily: "Helvetica, Arial, sans-serif";
182
+ readonly baselineFromBottom: 14;
183
+ readonly opacity: 1;
184
+ readonly minBodyWidthForYear: 80;
185
+ };
186
+ /**
187
+ * outer height → label body height: top + bottom padding + footer. The body
188
+ * is what the label is fitted into; a middle-aligned label is still centered
189
+ * in the whole padded note when it fits (see `computeBoundTextPosition`).
190
+ */
191
+ export declare const STICKY_NOTE_BODY_INSET_Y: number;
192
+ export declare const DEFAULT_STICKY_NOTE_SIZE = 250;
193
+ export declare const STICKY_NOTE_MIN_SIZE = 75;
194
+ export declare const STICKY_NOTE_SHADOW_OFFSET = 3;
195
+ export declare const STICKY_NOTE_SHADOW_OPACITY = 0.16;
196
+ export declare const STICKY_NOTE_EDGE_SHADOW_WIDTH = 0.5;
197
+ export declare const STICKY_NOTE_EDGE_SHADOW_OPACITY = 0.08;
153
198
  export declare const DEFAULT_FONT_FAMILY: FontFamilyValues;
199
+ /** number of slots in the font-picker top-picks strip — pick customization
200
+ * (replace / reorder) preserves it. Must equal `DEFAULT_FONTS.length` in
201
+ * `packages/excalidraw/components/FontPicker/FontPicker.tsx` (enforced by
202
+ * `fontTopPicks.test.ts`) */
203
+ export declare const FONT_TOP_PICKS_SLOTS = 3;
154
204
  export declare const DEFAULT_TEXT_ALIGN = "left";
155
205
  export declare const DEFAULT_VERTICAL_ALIGN = "top";
156
206
  export declare const DEFAULT_VERSION = "{version}";
@@ -224,9 +274,12 @@ export declare const TOUCH_CTX_MENU_TIMEOUT = 500;
224
274
  export declare const TITLE_TIMEOUT = 10000;
225
275
  export declare const VERSION_TIMEOUT = 30000;
226
276
  export declare const SCROLL_TIMEOUT = 100;
277
+ export declare const ZEN_MODE_TRANSITION_DURATION = 250;
227
278
  export declare const ZOOM_STEP = 0.1;
228
279
  export declare const MIN_ZOOM = 0.1;
229
280
  export declare const MAX_ZOOM = 30;
281
+ /** 100% zoom, for computations that have no editor zoom to go by */
282
+ export declare const DEFAULT_ZOOM: AppState["zoom"];
230
283
  export declare const HYPERLINK_TOOLTIP_DELAY = 300;
231
284
  export declare const IDLE_THRESHOLD = 60000;
232
285
  export declare const ACTIVE_THRESHOLD = 3000;
@@ -313,6 +366,7 @@ export declare const TOOL_TYPE: {
313
366
  readonly hand: "hand";
314
367
  readonly frame: "frame";
315
368
  readonly magicframe: "magicframe";
369
+ readonly stickynote: "stickynote";
316
370
  readonly embeddable: "embeddable";
317
371
  readonly laser: "laser";
318
372
  readonly autoshape: "autoshape";
@@ -55,6 +55,7 @@ export declare const KEYS: {
55
55
  readonly H: "h";
56
56
  readonly I: "i";
57
57
  readonly L: "l";
58
+ readonly N: "n";
58
59
  readonly O: "o";
59
60
  readonly P: "p";
60
61
  readonly Q: "q";
@@ -111,6 +112,7 @@ export declare const KeyCodeMap: Map<ValueOf<{
111
112
  readonly H: "h";
112
113
  readonly I: "i";
113
114
  readonly L: "l";
115
+ readonly N: "n";
114
116
  readonly O: "o";
115
117
  readonly P: "p";
116
118
  readonly Q: "q";
@@ -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;
@@ -87,6 +87,11 @@ export declare const getGlobalCSSVariable: (name: string) => string;
87
87
  * See https://github.com/excalidraw/excalidraw/pull/1722#discussion_r436340171
88
88
  */
89
89
  export declare const isRTL: (text: string) => boolean;
90
+ /**
91
+ * Checks whether the text has any RTL character, i.e. whether it may be laid
92
+ * out bidirectionally.
93
+ */
94
+ export declare const hasRTLChars: (text: string) => boolean;
90
95
  export declare const tupleToCoors: (xyTuple: readonly [number, number]) => {
91
96
  x: number;
92
97
  y: number;
@@ -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;
@@ -25,10 +25,9 @@ export type BindingStrategy = {
25
25
  * IMPORTANT: currently must be > 0 (this also applies to the computed gap)
26
26
  */
27
27
  export declare const BASE_BINDING_GAP = 5;
28
- export declare const BASE_BINDING_GAP_ELBOW = 5;
29
28
  export declare const BASE_ARROW_MIN_LENGTH = 10;
30
29
  export declare const FOCUS_POINT_SIZE: number;
31
- export declare const getBindingGap: (bindTarget: Pick<ExcalidrawBindableElement, "strokeWidth">, opts: Pick<ExcalidrawArrowElement, "elbowed">) => number;
30
+ export declare const getBindingGap: (bindTarget: Pick<ExcalidrawBindableElement, "strokeWidth">) => number;
32
31
  export declare const maxBindingDistance_simple: (zoom?: AppState["zoom"]) => number;
33
32
  export declare const isBindingEnabled: (appState: {
34
33
  isBindingEnabled: AppState["isBindingEnabled"];
@@ -49,16 +48,17 @@ export declare const getBindingStrategyForDraggingBindingElementEndpoints: (arro
49
48
  altKey?: boolean;
50
49
  finalize?: boolean;
51
50
  initialBinding?: boolean;
52
- zoom?: AppState["zoom"];
53
51
  gridSize?: NullableGridSize;
54
52
  }) => {
55
53
  start: BindingStrategy;
56
54
  end: BindingStrategy;
57
55
  };
58
56
  export declare const bindOrUnbindBindingElements: (selectedArrows: NonDeleted<ExcalidrawArrowElement>[], scene: Scene, appState: AppState) => void;
59
- export declare const bindBindingElement: (arrow: NonDeleted<ExcalidrawArrowElement>, hoveredElement: NonDeleted<ExcalidrawBindableElement>, mode: BindMode, startOrEnd: "start" | "end", scene: Scene, focusPoint?: GlobalPoint, shouldSnapToOutline?: boolean, isMidpointSnappingEnabled?: boolean) => void;
57
+ export declare const bindBindingElement: (arrow: NonDeleted<ExcalidrawArrowElement>, hoveredElement: NonDeleted<ExcalidrawBindableElement>, mode: BindMode, startOrEnd: "start" | "end", scene: Scene, zoom: AppState["zoom"], focusPoint?: GlobalPoint, shouldSnapToOutline?: boolean, isMidpointSnappingEnabled?: boolean) => void;
60
58
  export declare const unbindBindingElement: (arrow: ExcalidrawArrowElement, startOrEnd: "start" | "end", scene: Scene) => ExcalidrawBindableElement["id"] | null;
59
+ export declare const reanchorBindingsToOutline: (changedElement: NonDeleted<ExcalidrawBindableElement>, scene: Scene, zoom: AppState["zoom"]) => void;
61
60
  export declare const updateBoundElements: (changedElement: NonDeletedExcalidrawElement, scene: Scene, options?: {
61
+ /** see `getSimultaneouslyUpdatedElementIds` for how to pass it */
62
62
  simultaneouslyUpdated?: readonly NonDeletedExcalidrawElement[];
63
63
  changedElements?: Map<string, ExcalidrawElement>;
64
64
  }) => void;
@@ -69,12 +69,18 @@ export declare const updateBindings: (latestElement: NonDeletedExcalidrawElement
69
69
  height: number;
70
70
  };
71
71
  }) => void;
72
+ /**
73
+ * The id set of `simultaneouslyUpdated`, shared by every `updateBoundElements()`
74
+ * call given the same array. Pass one array instance for all elements of an
75
+ * operation, and don't change its membership after the first lookup, or the
76
+ * cached ids go stale.
77
+ */
78
+ export declare const getSimultaneouslyUpdatedElementIds: (simultaneouslyUpdated: readonly ExcalidrawElement[] | undefined) => ReadonlySet<ExcalidrawElement["id"]>;
72
79
  export declare const getHeadingForElbowArrowSnap: (p: Readonly<GlobalPoint>, otherPoint: Readonly<GlobalPoint>, bindableElement: ExcalidrawBindableElement | undefined | null, aabb: Bounds | undefined | null, origPoint: GlobalPoint, elementsMap: ElementsMap, zoom?: AppState["zoom"]) => Heading;
73
- export declare const bindPointToSnapToElementOutline: (arrowElement: ExcalidrawArrowElement, bindableElement: ExcalidrawBindableElement, startOrEnd: "start" | "end", elementsMap: ElementsMap, customIntersector?: LineSegment<GlobalPoint>, isMidpointSnappingEnabled?: boolean) => GlobalPoint;
80
+ export declare const bindPointToSnapToElementOutline: (arrowElement: ExcalidrawArrowElement, bindableElement: ExcalidrawBindableElement, startOrEnd: "start" | "end", elementsMap: ElementsMap, zoom: AppState["zoom"], customIntersector?: LineSegment<GlobalPoint>, isMidpointSnappingEnabled?: boolean) => GlobalPoint;
74
81
  export declare const avoidRectangularCorner: (arrowElement: ExcalidrawArrowElement, bindTarget: ExcalidrawBindableElement, elementsMap: ElementsMap, p: GlobalPoint) => GlobalPoint;
75
- export declare const snapToMid: (bindTarget: ExcalidrawBindableElement, elementsMap: ElementsMap, p: GlobalPoint, tolerance?: number, arrowElement?: ExcalidrawArrowElement) => GlobalPoint | undefined;
76
82
  export declare const updateBoundPoint: (arrow: NonDeleted<ExcalidrawArrowElement>, startOrEnd: "startBinding" | "endBinding", binding: FixedPointBinding | null | undefined, bindableElement: ExcalidrawBindableElement, elementsMap: ElementsMap, dragging?: boolean) => LocalPoint | null;
77
- export declare const calculateFixedPointForElbowArrowBinding: (linearElement: NonDeleted<ExcalidrawElbowArrowElement>, hoveredElement: ExcalidrawBindableElement, startOrEnd: "start" | "end", elementsMap: ElementsMap, shouldSnapToOutline?: boolean, isMidpointSnappingEnabled?: boolean) => {
83
+ export declare const calculateFixedPointForElbowArrowBinding: (linearElement: NonDeleted<ExcalidrawElbowArrowElement>, hoveredElement: ExcalidrawBindableElement, startOrEnd: "start" | "end", elementsMap: ElementsMap, zoom: AppState["zoom"], shouldSnapToOutline?: boolean, isMidpointSnappingEnabled?: boolean) => {
78
84
  fixedPoint: FixedPoint;
79
85
  };
80
86
  export declare const calculateFixedPointForNonElbowArrowBinding: (linearElement: NonDeleted<ExcalidrawArrowElement>, hoveredElement: NonDeleted<ExcalidrawBindableElement>, startOrEnd: "start" | "end", elementsMap: ElementsMap, focusPoint?: GlobalPoint) => {
@@ -1,6 +1,6 @@
1
1
  import type { GlobalPoint, LineSegment } from "@excalidraw/math";
2
- import type { FrameNameBounds } from "@excalidraw/excalidraw/types";
3
- import type { ElementsMap, ExcalidrawArrowElement, ExcalidrawBindableElement, ExcalidrawElement, NonDeleted, NonDeletedExcalidrawElement, NonDeletedSceneElementsMap, Ordered } from "./types";
2
+ import type { AppState, FrameNameBounds } from "@excalidraw/excalidraw/types";
3
+ import type { ElementsMap, ExcalidrawBindableElement, ExcalidrawElement, NonDeleted, NonDeletedExcalidrawElement, NonDeletedSceneElementsMap, Ordered } from "./types";
4
4
  export declare const shouldTestInside: (element: ExcalidrawElement) => boolean;
5
5
  export type HitTestArgs = {
6
6
  point: GlobalPoint;
@@ -14,9 +14,18 @@ export declare const hitElementItself: ({ point, element, threshold, elementsMap
14
14
  export declare const hitElementBoundingBox: (point: GlobalPoint, element: ExcalidrawElement, elementsMap: ElementsMap, tolerance?: number) => boolean;
15
15
  export declare const hitElementBoundingBoxOnly: (hitArgs: HitTestArgs, elementsMap: ElementsMap) => boolean;
16
16
  export declare const hitElementBoundText: (point: GlobalPoint, element: ExcalidrawElement, elementsMap: ElementsMap) => boolean;
17
- export declare const getAllHoveredElementAtPoint: (point: Readonly<GlobalPoint>, elements: readonly Ordered<NonDeletedExcalidrawElement>[], elementsMap: NonDeletedSceneElementsMap, tolerance?: number) => NonDeleted<ExcalidrawBindableElement>[];
18
- export declare const getHoveredElementForBinding: (point: Readonly<GlobalPoint>, elements: readonly Ordered<NonDeletedExcalidrawElement>[], elementsMap: NonDeletedSceneElementsMap, tolerance?: number) => NonDeleted<ExcalidrawBindableElement> | null;
19
- export declare const getHoveredElementForFocusPoint: (point: GlobalPoint, arrow: ExcalidrawArrowElement, elements: readonly Ordered<NonDeletedExcalidrawElement>[], elementsMap: NonDeletedSceneElementsMap, tolerance?: number) => NonDeleted<ExcalidrawBindableElement> | null;
17
+ /**
18
+ * Whether the element hides what is behind it from binding — an arrow's or a
19
+ * text label's. Images count as opaque, and frames once they support a
20
+ * background.
21
+ */
22
+ export declare const isOpaqueForBinding: (element: ExcalidrawElement) => boolean;
23
+ /**
24
+ * All elements an arrow endpoint at the point could bind to. Always includes
25
+ * the result of `getHoveredElementForBinding` for the same arguments.
26
+ */
27
+ export declare const getAllHoveredElementAtPoint: (point: Readonly<GlobalPoint>, elements: readonly Ordered<NonDeletedExcalidrawElement>[], elementsMap: NonDeletedSceneElementsMap, zoom: AppState["zoom"]) => NonDeleted<ExcalidrawBindableElement>[];
28
+ export declare const getHoveredElementForBinding: (point: Readonly<GlobalPoint>, elements: readonly Ordered<NonDeletedExcalidrawElement>[], elementsMap: NonDeletedSceneElementsMap, zoom: AppState["zoom"]) => NonDeleted<ExcalidrawBindableElement> | null;
20
29
  /**
21
30
  * Intersect a line with an element for binding test
22
31
  *