appState.openDialog
type was changed from null | string
to null | { name: string }
. #7336Umd build for browser since it was breaking in v0.17.0 #7349. Also make sure that when using Vite
, the process.env.IS_PREACT
is set as "true"
(string) and not a boolean.
define: {
"process.env.IS_PREACT": JSON.stringify("true"),
}
image
tool (also disabling image insertion in general, though keeps support for importing from .excalidraw
files) #6320.For disabling image
you need to set 👇
UIOptions.tools = {
image: false
}
Support excalidrawAPI
prop for accessing the Excalidraw API #7251.
Export getCommonBounds
helper from the package #7247.
Support frames via programmatic API #7205.
Export elementsOverlappingBBox
, isElementInsideBBox
, elementPartiallyOverlapsWithOrContainsBBox
helpers for filtering/checking if elements within bounds. #6727
Regenerate ids by default when using transform api and also update bindings by 0.5px to avoid possible overlapping #7195
Add onChange, onPointerDown, onPointerUp api subscribers #7154.
Support props.locked for setActiveTool #7153.
Add selected
prop for MainMenu.Item
and MainMenu.ItemCustom
components to indicate active state. #7078
The Ref
support has been removed in v0.17.0 so if you are using refs, please update the integration to use the excalidrawAPI
#7251.
Additionally ready
and readyPromise
from the API have been discontinued. These APIs were found to be superfluous, and as part of the effort to streamline the APIs and maintain simplicity, they were removed in version v0.17.0 #7251.
useDevice
hook's return value was changed to differentiate between editor
and viewport
breakpoints. #7243
process.env.IS_PREACT
to true
When using vite
or any build tools, you will have to make sure the process
is accessible as we are accessing process.env.IS_PREACT
to decide whether to use the preact
build.
Since Vite
removes env variables by default, you can update the Vite config to ensure its available :point_down:
define: {
"process.env.IS_PREACT": process.env.IS_PREACT,
},
This section lists the updates made to the excalidraw library and will not affect the integration.
Allow D&D dice app domain for embeds #7263
Remove full screen shortcut #7222
Make adaptive-roughness less aggressive #7250
Render frames on export #7210
Support mermaid flowchart and sequence diagrams to excalidraw diagrams 🥳 #6920
Support frames via programmatic API #7205
Make clipboard more robust and reintroduce contextmenu actions #7198
Support giphy.com embed domain #7192
Renderer tweaks #6698
Closing of "Save to.." Dialog on Save To Disk #7168
Added Copy/Paste from Google Docs #7136
Remove bound-arrows from frames #7157
New dark mode theme & light theme tweaks #7104
Better laser cursor for dark mode #7132
Laser pointer improvements #7128
Initial Laser Pointer MVP #6739
Export iconFillColor()
#6996
Element alignments - snapping #6256
Image insertion bugs #7278
ExportToSvg to honor frameRendering also for name not only for frame itself #7270
Can't toggle penMode off due to missing typecheck in togglePenMode #7273
Replace hard coded font family with const value in addFrameLabelsAsTextElements #7269
Perf issue when ungrouping elements within frame #7265
Fixes the shortcut collision between "toggleHandTool" and "distributeHorizontally" #7189
Allow pointer events when editing a linear element #7238
Make modal use viewport breakpoints #7246
Align input :hover
/:focus
with spec #7225
Dialog remounting on className updates #7224
Don't update label position when dragging labelled arrows #6891
Frame add/remove/z-index ordering changes #7194
Element relative position when dragging multiple elements on grid #7107
Freedraw non-solid bg hitbox not working #7193
Actions panel ux improvement #6850
Better fill rendering with latest RoughJS #7031
Fix for Strange Symbol Appearing on Canvas after Deleting Grouped Graphics (Issue #7116) #7170
Attempt to fix flake in wysiwyg tests #7173
Ensure ClipboardItem
created in the same tick to fix safari #7066
Wysiwyg left in undefined state on reload #7123
Ensure relative z-index of elements added to frame is retained #7134
Memoize static canvas on props.renderConfig
#7131
Regression from #6739 preventing redirect link in view mode #7120
Update links to excalidraw-app #7072
Ensure we do not stop laser update prematurely #7100
Remove invisible elements safely #7083
Icon size in manifest #7073
Elements being dropped/duplicated when added to frame #7057
Frame name not editable on dbl-click #7037
Polyfill Element.replaceChildren
#7034
DRY out tool typing #7086
Refactor event globals to differentiate from lastPointerUp
#7084
DRY out and simplify setting active tool from toolbar #7079
This section lists the updates made to the excalidraw library and will not affect the integration.
props.validateEmbeddable
to customize embeddable src url validation. #6691opts.fitToViewport
and opts.viewportZoomFactor
in the ExcalidrawAPI.scrollToContent
API. #6581.link
urls. #6728.DefaultSidebar
component to allow modifying the default sidebar, such as adding custom tabs to it. #6213#### BREAKING CHANGES
props.renderSidebar
is removed in favor of rendering as children
.appState.isSidebarDocked
replaced with appState.defaultSidebarDockedPreference
with slightly different semantics, and relating only to the default sidebar. You need to handle docked
state for your custom sidebars yourself.props.dockable
is removed. To indicate dockability, supply props.onDock()
alongside setting props.docked
.Sidebar.Header
is no longer rendered by default. You need to render it yourself.props.onClose
replaced with props.onStateChange
.restore()
/restoreAppState()
now retains appState.openSidebar
regardless of docked state.This section lists the updates made to the excalidraw library and will not affect the integration.
avif
, jfif
, webp
, bmp
, ico
image types #6500Zen-mode/go-to-plus button style tweaks #7006
Holding down CMD/CTRL will disable snap to grid when grid is active #6983
Update logo #6979
Export changeProperty()
and getFormValue()
. #6957
Partition main canvas vertically #6759
Support creating containers, linear elements, text containers, labelled arrows and arrow bindings programatically #6546
Add support for simplePDF in Web-Embeds #6810
Add support for val.town embeds #6821
Render bold lines in grid #6779
Adds support for stackblitz.com embeds #6813
Cache most of element selection #6747
Support customizing what parts of frames are rendered #6752
Make appState.selectedElementIds
more stable #6745
Overwrite confirmation dialogs #6658
Simple analitycs #6683
Introduce frames #6123
Add canvas-roundrect-polyfill package #6675
Polyfill CanvasRenderingContext2D.roundRect
#6673
Disable collab feature when running in iframe #6646
Assign random user name when not set #6663
Redesigned collab cursors #6659
Eye dropper #6615
Redesign of Live Collaboration dialog #6635
Recover scrolled position after Library re-opening #6624
Clearing library cache #6621
Update design of ImageExportDialog #6614
Add flipping for multiple elements #5578
Color picker redesign #6216
Add "unlock all elements" to canvas contextMenu #5894
Library sidebar design tweaks #6582
Add Trans component for interpolating JSX in translations #6534
Testing simple analytics and fathom analytics for better privacy of the users #6529
Retain seed
on shift-paste #6509
Allow avif
, jfif
, webp
, bmp
, ico
image types (#6500
Improperly disabling UI pointer-events on canvas interaction #7005
Several eyeDropper fixes #7002
IsBindableElement to affirm frames #6900
Use device.isMobile
for sidebar trigger label breakpoint #6994
Export to plus url #6980
Z-index inconsistencies during addition / deletion in frames #6914
Update size-limit so react is not installed as dependency #6964
Stale labeled arrow bounds cache after editing the label #6893
Canvas flickering due to resetting canvas on skipped frames #6960
Grid jittery after partition PR #6935
Regression in indexing when adding elements to frame #6904
Stabilize selectedElementIds
when box selecting #6912
Resetting deleted elements on duplication #6906
Make canvas compos memoize appState on props they declare #6897
Scope --color-selection
retrieval to given instance #6886
Webpack config exclude statement to system agnostic #6857
Remove embeddable
from generic elements #6853
Resizing arrow labels #6789
Eye-dropper not working with app offset correctly on non-1 dPR #6835
Add self destroying service-worker.js to migrate everyone from CRA to Vite #6833
Forgotten REACT_APP env variables #6834
Refresh sw when browser refreshed #6824
Adding to selection via shift box-select #6815
Prevent binding focus NaN value #6803
Use pull request in semantic workflow for better security #6799
Don't show canvasBackground
label when UIOptions.canvasActions.changeViewBackgroundColor
is false #6781
Use subdirectory for @excalidraw/excalidraw size limit #6787
Use actual dock state to not close docked library on insert #6766
UI disappears when pressing the eyedropper shortcut on mobile #6725
Elements in non-existing frame getting removed #6708
Scrollbars renders but disable #6706
Typo in chart.ts #6696
Do not bind text to container using text tool when it has text already #6694
Don't allow binding text to images #6693
Updated link for documentation page under help section #6654
Collab username style fixes #6668
Bound arrows not updated when rotating multiple elements #6662
Delete setCursor when resize #6660
Creating text while color picker open #6651
Cleanup textWysiwyg and getAdjustedDimensions #6520
Eye dropper not accounting for offsets #6640
Color picker input closing problem #6599
Export dialog shortcut toggles console on firefox #6620
Add react v17 useTransition
polyfill #6618
Library dropdown visibility issue for mobile #6613
withInternalFallback
leaking state in multi-instance scenarios #6602
Language list containing duplicate en
lang #6583
Garbled text displayed on avatars #6575
Assign the original text to text editor only during init #6580
I18n: Apply Trans component to publish library dialogue #6564
Fix brave error i18n string and remove unused #6561
Revert add version tags to Docker build #6540
Don't refresh dimensions for text containers on font load #6523
Cleanup getMaxContainerHeight and getMaxContainerWidth #6519
Cleanup redrawTextBoundingBox #6518
Text jumps when editing on Android Chrome #6503
Factor out shape generation from renderElement.ts
pt 2 #6878
Add typeScript support to enforce valid translation keys #6776
Simplify ImageExportDialog
#6578
Limiting the suggested binding to fix performance issue #6877
Memoize rendering of library #6622
Improve rendering performance for Library #6587
Use UIAppState
where possible to reduce UI rerenders #6560
Increase limit for bundle by 1kb #6880
Update to node 18 in docker #6822
Migrate to Vite 🚀 #6818
Migrate to Vite 🚀 #6713
Increase limit to 290 kB for prod bundle #6809
Add version tags to Docker build #6508
This section lists the updates made to the excalidraw library and will not affect the integration.
Rotate the text element when binding to a rotated container #6477
Support breaking words containing hyphen - #6014
Incorrect background fill button active state #6491
This section lists the updates made to the excalidraw library and will not affect the integration.
ExcalidrawAPI.scrollToContent
has new opts object allowing you to fit viewport to content, and animate the scrolling. #6319
Expose useI18n()
hook return an object containing t()
i18n helper and current langCode
. You can use this in components you render as <Excalidraw>
children to render any of our i18n locale strings. #6224
restoreElements
API now takes an optional parameter opts
which currently supports the below attributes
{ refreshDimensions?: boolean, repairBindings?: boolean }
The same opts
param has been added to restore
API as well.
For more details refer to the docs
refreshDimensions
in restoreElements
has been removed and can be enabled via opts
This section lists the updates made to the excalidraw library and will not affect the integration.
Constrain export dialog preview size #6475
Zigzag fill easter egg #6439
Add container to multiple text elements #6428
Starting migration from GA to Matomo for better privacy #6398
Add line height attribute to text element #6360
Add thai lang support #6314
Create bound container from text #6301
Improve text measurements in bound containers #6187
Bind text to container if double clicked on filled shape or stroke #6250
Make repair and refreshDimensions configurable in restoreElements #6238
Show error message when not connected to internet while collabo… #6165
Shortcut for clearCanvas confirmDialog #6114
Disable canvas smoothing (antialiasing) for right-angled elements #6186Co-authored-by: Ignacio Cuadra [email protected]
Center align text when wrapped in container via context menu #6480
Restore original container height when unbinding text which was binded via context menu #6444
Mark more props as optional for element #6448
Improperly cache-busting on canvas scale instead of zoom #6473
Incorrectly duplicating items on paste/library insert #6467
Library ids cross-contamination on multiple insert #6466
Color picker keyboard handling not working #6464
Abort freedraw line if second touch is detected #6440
Utils leaking Scene state #6461
Split "Edit selected shape" shortcut #6457
Center align text when bind to container via context menu #6451
Update coords when text unbinded from its container #6445
Autoredirect to plus in prod only #6446
Fixing popover overflow on small screen #6433
Introduce baseline to fix the layout shift when switching to text editor #6397
Don't refresh dimensions for deleted text elements #6438
Element vanishes when zoomed in #6417
Don't jump text to end when out of viewport in safari #6416
GetDefaultLineHeight should return default font family line height for unknown font #6399
Revert use ideographic
textBaseline to improve layout shift when editing text" #6400
Call stack size exceeded when paste large text #6373 (#6396)
Use ideographic
textBaseline to improve layout shift when editing text #6384
Chrome crashing when embedding scene on chrome arm #6383
Division by zero in findFocusPointForEllipse leads to infinite loop in wrapText freezing Excalidraw #6377
Containerizing text incorrectly updates arrow bindings #6369
Ensure export preview is centered #6337
Hide text align for labelled arrows #6339
Refresh dimensions when elements loaded from shareable link and blob #6333
Show error message when measureText API breaks in brave #6336
Add an offset of 0.5px for text editor in containers #6328
Move utility types out of .d.ts
file to fix exported declaration files #6315
More jotai scopes missing #6313
Provide HelpButton title prop #6209
Respect text align when wrapping in a container #6310
Compute bounding box correctly for text element when multiple element resizing #6307
Use jotai scope for editor-specific atoms #6308
Consider arrow for bound text element #6297
Text never goes beyond max width for unbound text elements #6288
Svg text baseline #6285
Compute container height from bound text correctly #6273
Fit mobile toolbar and make scrollable #6270
Indenting via tab
clashing with IME compositor #6258
Improve text wrapping inside rhombus and more fixes #6265
Improve text wrapping in ellipse and alignment #6172
Don't allow blank space in collab name #6211
Docker build architecture:linux/amd64 error occur on linux/arm64 instance #6197
Sort bound text elements to fix text duplication z-index error #5130
Hide welcome screen on mobile once user interacts #6185
Edit link in docs #6182
Inline SingleLibraryItem
into PublishLibrary
#6462
Make the example React app reusable without duplication #6188
UIOptions.welcomeScreen
option is now deprecated. #6117MainMenu
, MainMenu.Item
, and MainMenu.ItemLink
components now all support onSelect(event: Event): void
callback. If you call event.preventDefault()
, it will prevent the menu from closing when an item is selected (clicked on). #6152This section lists the updates made to the excalidraw library and will not affect the integration.
Add hand/panning tool #6141
Show copy-as-png export button on firefox and show steps how to enable it #6125
Horizontal padding when aligning bound text containers #6180
Make tunnels work in multi-instance scenarios #6178
Add 1px width to the container to calculate more accurately #6174
Quick typo fix #6167
Set the width correctly using measureText in editor #6162
:bug: broken emojis when wrap text #6153
Button background and svg sizes #6155
Support customization for the editor welcome screen #6048.
Expose component API for the Excalidraw main menu #6034, You can read more about its usage here
Footer is now rendered as child component instead of passed as a render prop #5970.
Any top-level children passed to the <Excalidraw/>
component that do not belong to one of the officially supported Excalidraw children components are now rendered directly inside the Excalidraw container (previously, they weren't rendered at all) #6096.
Expose LiveCollaborationTrigger component. Replaces props.onCollabButtonClick
#6104.
props.onCollabButtonClick
is now removed. You need to render the main menu item yourself, and optionally also render the <LiveCollaborationTrigger>
component using renderTopRightUI prop if you want to retain the canvas button at top-right.renderFooter
is now removed in favor of rendering as a child component.appState.currentItemStrokeSharpness
and appState.currentItemLinearStrokeSharpness
into appState.currentItemRoundness
. Renamed changeSharpness
action to changeRoundness
. Excalidraw element's strokeSharpness
was changed to roundness
. Check the PR for types and more details #5553.This section lists the updates made to the excalidraw library and will not affect the integration.
Generic button export #6092
Scroll using PageUp and PageDown #6038
Support shrinking text containers to original height when text removed #6025
Move contextMenu into the component tree and control via appState #6021
Allow readonly actions to be used in viewMode #5982
Support labels for arrow 🔥 #5723
Don't add midpoint until dragged beyond a threshold #5927
Changed text copy/paste behaviour #5786
Reintroduce x
shortcut for freedraw
#5840
Tweak toolbar shortcuts & remove library shortcut #5832
Clean unused images only after 24hrs (local-only) #5839
Refetch errored/pending images on collab room init load #5833
Stop deleting whole line when no point select in line editor #5676
Editor redesign 🔥 #5780
Mobile tools positioning #6107
Renamed folder MainMenu->main-menu and support rest props #6103
Use position absolute for mobile misc tools #6099
React.memo resolvers not accounting for all props #6042
Image horizontal flip fix + improved tests #5799
Png-exporting does not preserve angles correctly for flipped images #6085
Stale appState of MainMenu defaultItems rendered from Actions #6074
HelpDialog #6072
Show error message on collab save failure #6063
Remove ga from docker build #6059
Use displayName since name gets stripped off when uglifying/minifiyng in production #6036
Remove background from wysiwyg when editing arrow label #6033
Use canvas measureText to calculate width in measureText #6030
Restoring deleted bindings #6029
ColorPicker getColor #5949
Don't push whitespace to next line when exceeding max width during wrapping and make sure to use same width of text editor on DOM when measuring dimensions #5996
Showing grabbing
cursor when holding spacebar
#6015
Resize sometimes throwing on missing null-checks #6013
PWA not working after CRA@5 update #6012
Not properly restoring element stroke and bg colors #6002
Avatar outline on safari & center #5997
Chart pasting not working due to removing tab characters #5987
Apply the right type of roundness when pasting styles #5979
Remove editor onpaste handler #5971
Remove blank space #5950
Galego and Kurdî missing in languages plus two locale typos #5954
ExcalidrawArrowElement
rather than ExcalidrawArrowEleement
#5955
RenderFooter styling #5962
Repair element bindings on restore #5956
Don't allow whitespaces for bound text #5939
Bindings do not survive history serialization #5942
Dedupe boundElement ids when container duplicated with alt+drag #5938
Scale font correctly when using shift #5935
Always bind to container selected by user #5880
Fonts not rendered on init if loadingdone
not fired #5923
Stop replacing del
word with Delete
#5897
Remove legacy React.render() from the editor #5893
Allow adding text via enter only for text containers #5891
Stop font loadingdone
loop when rendering element SVGs #5883
Refresh text dimensions only after font load done #5878
Correctly paste contents parsed by JSON.parse()
as text. #5868
SVG element attributes in icons.tsx #5871
Merge existing text with new when pasted #5856
Disable FAST_REFRESH to fix live reload #5852
Paste clipboard contents into unbound text elements #5849
Compute dimensions of container correctly when text pasted on container #5845
Line editor points rendering below elements #5781
Syncing 1-point lines to remote clients #5677
Incorrectly selecting linear elements on creation while tool-locked #5785
Corrected typo in toggle theme shortcut #5813
Hide canvas-modifying UI in view mode #5815
Fix vertical/horizntal centering icons #5812
Consistent use of ZOOM_STEP #5801
Multiple elements resizing regressions #5586
Changelog typo #5795
Move release scripts to use release branch #5958
Stops ignoring .env files from docker context so env variables get set during react app build. #5809
restoreElements()
now takes an optional parameter to indicate whether we should also recalculate text element dimensions. Defaults to true
, but since this is a potentially costly operation, you may want to disable it if you restore elements in tight loops, such as during collaboration #5432.renderSidebar
prop (#5663).toggleMenu
prop to toggle specific menu open/close state (#5663).customData
on Excalidraw elements [#5592].exportPadding?: number;
to exportToCanvas and exportToBlob. The default value of the padding is 10
.props.UIOptions.canvasActions.theme
is now renamed to props.UIOptions.canvasActions.toggleTheme
#5660.setToastMessage
API is now renamed to setToast
API and the function signature is also updated #5427. You can also pass duration
and closable
attributes along with message
.This section lists the updates made to the excalidraw library and will not affect the integration.
Render library into Sidebar
on mobile #5774
Additional drag and drop image format support (webp, bmp, ico) #5749
Enter and Exit line editor via context menu #5719
Further reduce darkmode init flash #5701
Support segment midpoints in line editor #5641
Added exportPadding to PNG (blob) export in @excalidraw/utils #5626
Introduce ExcalidrawElements and ExcalidrawAppState provider #5463
Enable midpoint inside linear element editor #5564
Show a mid point for linear elements #5534
Lock angle when editing linear elements with shift pressed #5527
Redesign linear elements 🎉 #5501
Cursor alignment when creating linear elements with shift pressed #5518
Shift-clamp when creating multi-point lines/arrows #5500
Cursor alignment when creating generic elements #5516
Make context menu scrollable #4030
Ungroup short cut key #5779
Replaced KeyboardEvent.code with KeyboardEvent.key for all letters #5523
Free draw flip not scaling correctly #5752
Wait for window focus until prompting for library install #5751
Update perfect freehand library to fix extra dot #5727
RestoreElementWithProperties drops "parent" property #5742
Horizontal text alignment for bound text when resizing #5721
Set the dimensions of bound text correctly #5710
Image-mirroring in export preview and in exported svg #5700
Double state update incorrectly resetting state #5704
Remove no longer used code related to collab room loading #5699
Revert webpack deduping to fix @next
runtime #5695
Move to release notes for v0.9.0 and after #5686
Zen-mode exit button not working #5682
Buttons jump around on the mobile menu #5658
#5622 - prevent session theme reset during collaboration #5640
Library actions inside the sidebar #5638
Don't render library menu twice for mobile #5636
Reintroduce help dialog button #5631
Add display name to components so it doesn't show as anonymous #5616
Improve solveQuadratic when a = 0 #5618
Add random tiny offsets to avoid linear elements from being clipped #5615
Crash when adding a new point in the line editor #5602 #5606
Allow box selection of points when inside editor #5594
Remove unnecessary conditions in pointerup for linear elements #5575
Check if hitting link in handleSelectionOnPointerDown #5589
Points not being normalized on single-elem resize #5581
Deselect linear element when clicked inside bounding box outside editor #5579
Resize multiple elements from center #5560
Call static methods via class instead of instance in linearElementEditor #5561
Show bounding box for 3 or more linear point elements #5554
Cleanup the condition for dragging elements #5555
Shareable links being merged with current scene data #5547
Scene lookup failing when looking up by id #5542
Remove rounding to fix jitter when shift-editing #5543
Line deselected when shift-dragging point outside editor #5540
Flip linear elements after redesign #5538
Disable locking aspect ratio for box-selection #5525
Add title
attribute to the modal close button #5521
Context menu positioning when component has offsets #5520
Resolve paths in prebuild.js script #5498
Use flushSync when moving line editor since we need to read previous value after setting state #5508
UseLayout effect cleanup in dev mode for charts #5505
Revert browser toast for high/low zoom #5495
Fixing push to DockerHub #5468
Incorrectly rendering freedraw elements #5481
Generate types when building example #5480
Use React.FC as react-dom is not able to infer types of Modal #5479
Missing translation for "Scale" to Export Dialog #5456
Add display name for Excalidraw component so it doesn't show as anonymous #5464
Account for safe area for floating buttons on mobile #5420
Attribute warnings in comment svg example #5465
Check for ctrl key when wheel event triggered to only disable zooming #5459
Disable render throttling by default & during resize #5451
Attach wheel event to exscalidraw container only #5443
Show toast when browser zoom is not 100% #5304
Prevent browser zoom inside Excalidraw #5426
Typo in changelog #5425
Create a util to compute container dimensions for bound text container #5708
Reuse common ui dialogs and message for mobile and LayerUI #5611
Stats component #5610
Move footer to its own component #5609
Remove unused attribute hasHitElementInside from pointerDownState #5591
Cleanup renderScene #5573
Rename docs to dev-docs #5487
Remove unnecessary if condition for linear element onKeyDown #5486
Improve typing & check #5415
Don't pass zenModeEnable, viewModeEnabled and toggleZenMode props to LayerUI #5444
Check out the release notes )
This section lists the updates made to the excalidraw library and will not affect the integration.
Check out the release notes
Check out the release notes
Check out the release notes
These section lists the updates which may affect your integration, so it is recommended to go through this when upgrading the version.
appState
properties in updateScene
API. Earlier only appState.viewBackgroundColor
was supported, now any attribute can be updated with this API.serializeAsJSON
helper that we use when saving Excalidraw scene to a file #3538.renderTopRightUI
prop #3539, #3572 .This also removes the GitHub icon, keeping it local to the https://excalidraw.com app.
renderFooter
prop. In case you were hiding this icon earlier, you need not do that anymore #3577.Now appState
is also passed to renderFooter
prop.
These section lists the updates made to the excalidraw library and will not affect the integration.
.visually-hidden
elements #3501.backdrop-filter
to improve perf #3506scrollToContent
API now supports passing just a single Excalidraw element, or none at all (which will default to current elements on the scene) #3482.#### BREAKING CHANGE
Renamed setScrollToContent
to scrollToContent
.
Make library local to given excalidraw instance (previously, all instances on the same page shared one global library) #3451.
Added prop onLibraryChange which if supplied will be called when library is updated.
Added attribute libraryItems
to prop initialData which can be used to load excalidraw with existing library items.
Assign a unique id to the excalidraw component. The id can be accessed via ref
.
#### BREAKING CHANGE
From now on the host application is responsible for persisting the library to LocalStorage (or elsewhere), and importing it on mount.
Bind the keyboard events to component and added a prop handleKeyboardGlobally
which if set to true will bind the keyboard events to document #3430.
#### BREAKING CHANGE
Earlier keyboard events were bind to document but now its bind to Excalidraw component by default. So you will need to set handleKeyboardGlobally
to true if you want the previous behaviour (bind the keyboard events to document).
Recompute offsets on scroll
of the nearest scrollable container #3408. This can be disabled by setting detectScroll
to false
.
Add onPaste
prop to handle custom clipboard behaviours #3420.
version
and versionNonce
(only applies to the selected elements). This fix will allow you account for z-index changes if you're syncing just the elements that changed (and not the whole scene) #3483.Only handle cut/paste events inside excalidraw #3484.
Make history local to a given Excalidraw instance. This fixes a case where history was getting shared when you have multiple Excalidraw components on the same page #3481.
Use active Excalidraw component when editing text. This fixes a case where text editing was not working when you have multiple Excalidraw components on the same page #3478.
Fix library being pasted off-center #3462.
When switching theme, apply it only to the active Excalidraw component. This fixes a case where the theme was getting applied to the first Excalidraw component if you had multiple Excalidraw components on the same page #3446.
Removed exposing getSyncableElements
helper which was specific to excalidraw app collab implementation #3471. If you happened to use it, you can easily reimplement it yourself using the newly exposed isInvisiblySmallElement helper:
const getSyncableElements = (elements: readonly ExcalidrawElement[]) =>
elements.filter((el) => el.isDeleted || !isInvisiblySmallElement(el));
DataState
→ ExportedDataState
LibraryData
→ ExportedLibraryData
Support tab-to-indent when editing text #3411.
App now breaks into mobile view using the component dimensions, not viewport dimensions. This fixes a case where the app would break sooner than necessary when the component's size is smaller than viewport #3414.
Add screenshots to manifest.json #3369.
Enable drop event on the whole component #3406.
Focus on last active element when dialog closes #3447.
Fix incorrectly caching png file handle #3407.
Fix popover position incorrect on Safari for non-zero offsets/scroll #3399.
UIOptions
prop to customise canvas actions
which includes customising background color picker
, clear canvas
, export
, load
, save
, save as
& theme toggle
#3364. Check the readme for more details.Calculate width/height
of canvas based on excalidraw component (".excalidraw" selector) & also resize and update offsets whenever the dimensions of excalidraw component gets updated #3379. You also don't need to add a resize handler anymore for excalidraw as its handled now in excalidraw itself.
width/height
props have been removed. Instead now it takes 100%
of width
and height
of the container so you need to make sure the container in which you are rendering Excalidraw has non zero dimensions (It should have non zero width and height so Excalidraw can match the dimensions of containing block)Calculate offsets when excalidraw container resizes using resize observer api #3374.
Export types for the package so now it can be used with typescript #3337. The types are available at @excalidraw/excalidraw/types
.
Add renderCustomStats
prop to render extra stats on host, and expose setToastMessage
API via refs which can be used to show toast with custom message #3360.
Support passing a CSRF token when importing libraries to prevent prompting before installation. The token is passed from https://libraries.excalidraw.com using the token
URL key #3329.
Use location.hash
when importing libraries to fix installation issues. This will require host apps to add a hashchange
listener and call the newly exposed excalidrawAPI.importLibrary(url)
API when applicable #3320. Check the readme for more details.
Append location.pathname
to libraryReturnUrl
default url #3325.
Support image elements #3424.
Expose separate builds for dev and prod and support source maps in dev build #3330. Check the readme for more details.
excalidraw.production.min.js
instead of excalidraw.min.js
. If you want to use dev build you can use excalidraw.development.js
window.name
if present during excalidraw libraries installation so it opens in same tab for the host. If window.name
is not set it will open in a new tab #3299.name
prop to indicate the name of the drawing which will be used when exporting the drawing. When supplied, the value takes precedence over intialData.appState.name
, the name
will be fully controlled by host app and the users won't be able to edit from within Excalidraw #3273.Export API setCanvasOffsets
via ref
to set the offsets for Excalidraw#3265.
offsetLeft
and offsetTop
props have been removed now so you have to use the setCanvasOffsets
via ref
to achieve the same.Export API to export the drawing to canvas, svg and blob #3258. For more info you can check the readme
Add a theme
prop to indicate Excalidraw's theme. #3228. When this prop is passed, the theme is fully controlled by host app.
Support libraryReturnUrl
prop to indicate what URL to install libraries to #3227.
initialData.scrollToCenter
and setScrollToCenter
API exposed via ref to initialData.scrollToContent
and setScrollToContent
respectively#3261.Rename appearance to theme #3237.
appState.appearance
is renamed to appState.theme
so wherever appState.appearance
including initialData.appState.appearance
should be renamed to appState.theme
and initialData.appState.theme
respectively. If the appearance
was persisted earlier, now it needs to passed as theme
.Appearance_dark
is renamed to theme--dark
.Appearance_dark-background-none
is renamed to theme--dark-background-none
.100ms
so offsets
gets updated faster if changed when container scrolled #3182.renderFooter
prop change #3183Array.from
when spreading over set so that typescript transpiles correctly in the umd build#3165.window.EXCALIDRAW_ASSET_PATH
which host can use to load assets from a different URL. By default it will be loaded from https://unpkg.com/@excalidraw/excalidraw{currentVersion}/dist/
#3068.Also now the assets will have a hash in filename so cache bursting can easily happen with version bump.
Add support for scrollToCenter
in initialData so host can control whether to scroll to center on mount #3070.
Export restore
, restoreAppState
and restoreElements
to host #3049
user
is now removed.zenModeEnabled
and gridModeEnabled
prop which enables zen mode and grid mode respectively #2901. When this prop is used, the zen mode / grid mode will be fully controlled by the host app.viewModeEnabled
prop which enabled the view mode #2840. When this prop is used, the view mode will not show up in context menu is so it is fully controlled by host.getAppState
on excalidrawRef
#2834.__webpack_public_path__
to host the assets#2835copy
, cut
, and paste
actions from contextmenu #2872Ctrl-Y
shortcut to redo on Windows #2831.lang
attribute with the current lang. #2995Sentence case
for Live collaboration
Exported few Extra API's which can be used by the host to communicate with Excalidraw.
Remove language picker, and add langCode
, renderFooter
#2644:
renderFooter
prop. The reasoning is that the i18n should be controlled by the app itself, not by the nested Excalidraw component.langCode
prop to control the UI language.Add support for exportToBackend
prop to allow host apps to implement shareable links #2612
onCollabButtonClick
is not provided #2598cmd+o
shortcut to load scene #2732First release of @excalidraw/excalidraw