[Snyk] Upgrade @excalidraw/excalidraw from 0.17.6 to 0.18.0 #25
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Snyk has created this PR to upgrade @excalidraw/excalidraw from 0.17.6 to 0.18.0.
ℹ️ Keep your dependencies up-to-date. This makes it easier to fix existing vulnerabilities and to more quickly identify and fix newly disclosed vulnerabilities when they affect your project.
The recommended version is 21 versions ahead of your current version.
The recommended version was released 2 months ago.
Release notes
Package name: @excalidraw/excalidraw
Excalidraw Library
0.18.0 (2025-03-11)
Highlights
Command palette #7804
Multiplayer undo / redo #7348
Editable element stats #6382
Text element wrapping #7999
Font picker with more fonts #8012
Font for Chinese, Japanese, and Korean #8530
Font subsetting for SVG export #8384
Elbow arrows #8299, #8952
Flowcharts #8329
Scene search #8438
Image cropping #8613
Element linking #8812
Breaking changes
Deprecated UMD bundle in favor of ES modules #7441, #9127
We've transitioned from
UMDtoESMbundle format. Our newdistfolder inside@ excalidraw/excalidrawpackage now contains only bundled source files, making any dependencies tree-shakable. The package comes with the following structure:Make sure that your JavaScript environment supports ES modules. You may need to define
"type": "module"in yourpackage.jsonfile or as part of the<script type="module" />attribute.Typescript: deprecated "moduleResolution":
"node"or"node10"Since
"node"and"node10"do not supportpackage.json"exports"fields, having these values in yourtsconfig.jsonwill not work. Instead, use"bundler","node16"or"nodenext"values. For more information, see Typescript's documentation.ESM strict resolution
Due to ESM's strict resolution, if you're using Webpack or other bundler that expects import paths to be fully specified, you'll need to disable this feature explicitly.
For example in Webpack, you should set
resolve.fullySpecifiedtofalse.For this reason, CRA will no longer work unless you eject or use a workaround such as craco.
New structure of the imports
Depending on the environment, this is how imports should look like with the
ESM:With bundler (Vite, Next.js, etc.)
Without bundler (Browser)
/>
<!-- import maps used for deduplicating react & react-dom versions -->
<script type="importmap">
{
"imports": {
"react": "https://esm.sh/react@19.0.0",
"react/jsx-runtime": "https://esm.sh/react@19.0.0/jsx-runtime",
"react-dom": "https://esm.sh/react-dom@19.0.0"
}
}
</script>
<script type="module">
import React from "https://esm.sh/react@19.0.0";
import ReactDOM from "https://esm.sh/react-dom@19.0.0";
import * as ExcalidrawLib from "https://esm.sh/@ excalidraw/excalidraw@0.18.0/dist/dev/index.js?external=react,react-dom";
</script>">
Deprecated
excalidraw-assetsandexcalidraw-assets-devfolders #8012, #9127The
excalidraw-assetsandexcalidraw-assets-devfolders, which contained locales and fonts, are no longer used and have been deprecated.Locales
Locales are no longer treated as static
.jsonassets but are transpiled withesbuilddirectly to the.jsas ES modules. Note that some build tools (i.e. Vite) may require settinges2022as a build target, in order to support "Arbitrary module namespace identifier names", e.g.export { english as "en-us" } ).Fonts
All fonts are automatically loaded from the esm.run CDN. For self-hosting purposes, you'll have to copy the content of the folder
node_modules/@ excalidraw/excalidraw/dist/prod/fontsto the path where your assets should be served from (i.e.public/directory in your project). In that case, you should also setwindow.EXCALIDRAW_ASSET_PATHto the very same path, i.e./in case it's in the root:or, if you serve your assets from the root of your CDN, you would do:
or, if you prefer the path to be dynamically set based on the
location.origin, you could do the following:Deprecated
commitToHistoryin favor ofcaptureUpdateinupdateSceneAPI #7348, #7898updateScene({ elements, appState, commitToHistory: true }); // A
updateScene({ elements, appState, commitToHistory: false }); // B
// after
import { CaptureUpdateAction } from "@ excalidraw/excalidraw";
updateScene({
elements,
appState,
captureUpdate: CaptureUpdateAction.IMMEDIATELY,
}); // A
updateScene({
elements,
appState,
captureUpdate: CaptureUpdateAction.NEVER,
}); // B
The
updateSceneAPI has changed due to the addedStorecomponent, as part of the multiplayer undo / redo initiative. Specifically, optionalsceneDataparametercommitToHistory: booleanwas replaced with optionalcaptureUpdate: CaptureUpdateActionTypeparameter. Therefore, make sure to update all instances ofupdateScene, which usecommitToHistoryparameter according to the before / after table below.commitToHistory(before)captureUpdate(after)trueCaptureUpdateAction.IMMEDIATELYfalse(default)CaptureUpdateAction.EVENTUALLY(default)CaptureUpdateAction.IMMEDIATELY- triggered either by the nextupdateSceneor internally by the editor. These updates will eventually make it to the local undo / redo stacks.CaptureUpdateAction.NEVERCaptureUpdateAction.NEVERfor updates which should never be recorded, such as remote updates or scene initialization. These updates will never make it to the local undo / redo stacks.Other
ExcalidrawTextElement.baselinewas removed and replaced with a vertical offset computation based on font metrics, performed on each text element re-render. In case of custom font usage, extend theFONT_METRICSobject with the related properties. #7693ExcalidrawEmbeddableElement.validatedwas removed and moved to the private editor state. This should largely not affect your apps unless you were reading from this attribute. We keep validating embeddable urls internally, and the publicprops.validateEmbeddablestill applies. #7539Stats container CSS has changed, so if you're using
renderCustomStats, you may need to adjust your styles to retain the same layout. #8361<DefaultSidebar />triggers are now always merged with host app triggers, rendered through<DefaultSidebar.Triggers/>.<DefaultSidebar.Triggers/>no longer accepts any props other than children. #8498Features
Prefer user defined coordinates and dimensions when creating a frame using
convertToExcalidrawElements#8517props.initialDatacan now be a function that returnsExcalidrawInitialDataStateorPromise<ExcalidrawInitialDataState>#8107MainMenu.DefaultItems.ToggleThemenow supportsonSelect(theme: string)callback, and optionallyallowSystemTheme: booleanalongsidetheme: stringto indicate you want to allow users to set to system theme (you need to handle this yourself) #7853Add
useHandleLibrary'sopts.adapteras the new recommended pattern to handle library initialization and persistence on library updates #7655Add
useHandleLibrary'sopts.migrationAdapteradapter to handle library migration during init, when migrating from one data store to another (e.g. from LocalStorage to IndexedDB) #7655Add
onPointerUpprop #7638Expose
getVisibleSceneBoundshelper to get scene bounds of visible canvas area #7450Soft-deprecate
useHandleLibrary'sopts.getInitialLibraryItemsin favor ofopts.adapter. #7655Extended
window.EXCALIDRAW_ASSET_PATHto accept array of pathsstring[]as a value, allowing to specify multiple baseURLfallbacks. #8286Custom text metrics provider #9121
Add
props.onDuplicate#9117Change empty arrowhead icon #9100
Tweak slider colors to be more muted #9076
Improve library sidebar performance #9060
Implement custom Range component for opacity control #9009
Box select frame & children to allow resizing at the same time #9031
Allow installing libs from excal github #9041
Update jotai #9015
Do not delete frame children on frame delete #9011
Add action to wrap selected items in a frame #9005
Reintroduce
.excalidraw.pngdefault when embedding scene #8979Add mimeTypes on file save #8946
Add crowfoot to arrowheads #8942
Make HTML attribute sanitization stricter #8977
Validate library install urls #8976
Cleanup svg export and move payload to
<metadata>#8975Use stats panel to crop #8848
Snap when cropping as well #8831
Update blog url #8767
Export scene to e+ on workspace creation/redemption #8514
Added sitemap & fixed robot txt #8699
Do not strip unknown element properties on restore #8682
Added reddit links as embeddable #8099
Self-hosting existing google fonts #8540
Flip arrowheads if only arrow(s) selected #8525
Common elbow mid segments #8440
Merge search sidebar back to default sidebar #8497
Smarter zooming when scrolling to match & only match on search/switch #8488
Reset copyStatus on export dialog settings change #8443
Tweak copy button success animation #8441
Enable panning/zoom while in wysiwyg #8437
Visual debugger #8344
Improve elbow arrow keyboard move #8392
Rewrite d2c to not require token #8269
Split
gridSizefrom enabled state & support customgridStep#8364Improve zoom-to-content when creating flowchart #8368
Stats popup style tweaks #8361
Remove automatic frame naming #8302
Ability to debug the state of fractional indices #8235
Improve mermaid detection on paste #8287
Upgrade mermaid-to-excalidraw to v1.1.0 #8226
Bump max file size #8220
Smarter preferred lang detection #8205
Support Stats bound text
fontSizeediting #8187Paste as mermaid if applicable #8116
Stop autoselecting text on text edit on mobile #8076
Create new text with width #8038
Wrap long text when pasting #8026
Upgrade to mermaid-to-excalidraw v1 🚀 #8022
Rerender canvas on focus #8035
Add missing
type="button"#8030Add install-PWA to command palette #7935
Tweak a few icons & add line editor button to side panel #7990
Allow binding only via linear element ends #7946
Resize elements from the sides #7855
Record freedraw tool selection to history #7949
Export reconciliation #7917
Add "toggle grid" to command palette #7887
Fractional indexing #7359
Show firefox-compatible command palette shortcut alias #7825
Upgrade mermaid-to-excalidraw to 0.3.0 #7819
Support to not render remote cursor & username #7130
Expose more collaborator status icons #7777
Close dropdown on escape #7750
Text measurements based on font metrics #7693
Improve collab error notification #7741
Grouped together Undo and Redo buttons on mobile #9109
Remove GA code from binding #9042
Load old library if migration fails
Change LibraryPersistenceAdapter
load()source->priorityFixes
Fix inconsistency in resizing while maintaining aspect ratio #9116
IFrame and elbow arrow interaction fix #9101
Duplicating/removing frame while children selected #9079
Elbow arrow z-index binding #9067
Library item checkbox style regression #9080
Elbow arrow orthogonality #9073
Button bg CSS variable leaking into other styles #9075
Fonts not loading on export (again) #9064
Merge server-side fonts with liberation sans #9052
Hyperlinks html entities #9063
Remove flushSync to fix flickering #9057
Excalidraw issue #9045 flowcharts: align attributes of new node #9047
Align arrows bound to elements #8833 #8998
Update elbow arrow on font size change #8798 #9002
Undo for elbow arrows create incorrect routing #9046
Flowchart clones the current arrowhead #8581
Adding partial group to frame #9014
Do not refocus element link input on unrelated updates #9037
Arrow binding behaving unexpectedly on pointerup #9010
Change cursor by tool change immediately #8212
Package build fails on worker chunks #8990
Z-index clash in mobile UI #8985
Elbow arrows do not work within frames (issue: #8964) #8969
NormalizeSVG width and height from viewbox when size includes decimal points #8939
Make arrow binding area adapt to zoom levels #8927
Robust
state.editingFrameteardown #8941Regression on dragging a selected frame by its name #8924
Right-click paste for images in clipboard (Issue #8826) #8845
Fixed image transparency by adding alpha option to preserve image alpha channel #8895
Flush pending DOM updates before .focus() #8901
Normalize svg using only absolute sizing #8854
Element link selector dialog z-index & positioning #8853
Update old blog links & add canonical url #8846
Optimize frameToHighlight state change and snapLines state change #8763
Make some events expllicitly active to avoid console warnings #8757
Unify binding update options for
updateBoundElements()#8832Cleanup scripts and support upto node 22 #8794
Usage of
node12 which is deprecated#8791Remove manifest.json #8783
Load env vars correctly and set debug and linter flags to false explicitly in prod mode #8770
Console error in dev mode due to missing font path in non-prod #8756
Text pushes UI due to padding #8745
Fix trailing line whitespaces layout shift #8714
Load font faces in Safari manually #8693
Restore svg image DataURL dimensions #8730
Image cropping svg + compat mode #8710
Usage of
node12 which is deprecated#8709Image render perf #8697
Undo/redo action for international keyboard layouts #8649
Comic Shanns issues, new fonts structure #8641
Remove export-to-clip-as-svg shortcut for now #8660
Text disappearing on edit #8558 (#8624)
Elbow arrow fixedpoint flipping now properly flips on inverted resize and flip action #8324
Svg and png frame clipping cases #8515
Re-route elbow arrows when pasted #8448
Buffer dependency #8474
Linear element complete button disabled #8492
Aspect ratios of distorted images are not preserved in SVG exports #8061
WYSIWYG editor padding is not normalized with zoom.value #8481
Improve canvas search scroll behavior further #8491
AddFiles clears the whole image cache when each file is added - regression from #8471 #8490
selectinstead offocussearch input #8483Image rendering issue when passed in
initialData#8471Add partial mocking #8473
PropertiesPopover maxWidth changing fixed units to relative units #8456
View mode wheel zooming does not work #8452
Fixed copy to clipboard button #8426
Context menu does not work after after dragging on StatsDragInput #8386
Perf regression in
getCommonBounds#8429Object snapping not working #8381
Reimplement rectangle intersection #8367
Round coordinates and sizes for rectangle intersection #8366
Text content with tab characters act differently in view/edit #8336
Drawing from 0-dimension canvas #8356
Disable flowchart keybindings inside inputs #8353
Yet more patching of intersect code #8352
Missing
act()in flowchart tests #8354Z-index change by one causes app to freeze