v0.17.3 (2024-02-09)
v0.17.0 (2023-11-14)
v0.17.0 (2023-11-14)
Features
-
Added support for disabling
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 forMainMenu.Item
andMainMenu.ItemCustom
components to indicate active state. #7078
Fixes
- Double image dialog on image insertion #7152.
Breaking Changes
-
The
Ref
support has been removed in v0.17.0 so if you are using refs, please update the integration to use theexcalidrawAPI
#7251. -
Additionally
ready
andreadyPromise
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 betweeneditor
andviewport
breakpoints. #7243
Build
-
Support Preact #7255. The host needs to set
process.env.IS_PREACT
totrue
When using
vite
or any build tools, you will have to make sure theprocess
is accessible as we are accessingprocess.env.IS_PREACT
to decide whether to use thepreact
build.Since
Vit
e removes env variables by default, you can update the Vite config to ensure it's available 👇define: { "process.env.IS_PREACT": process.env.IS_PREACT, },
Excalidraw Library
This section lists the updates made to the excalidraw library and will not affect the integration.
Features
-
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
Fixes
-
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
Refactor
-
DRY out tool typing #7086
-
Refactor event globals to differentiate from
lastPointerUp
#7084 -
DRY out and simplify setting active tool from toolbar #7079
Performance
- Improve element in frame check #7124
v0.16.1 (2023-09-21)
0.16.1 (2023-09-21)
Excalidraw Library
This section lists the updates made to the excalidraw library and will not affect the integration.
Fixes
- More eye-droper fixes #7019
Refactor
- Move excalidraw-app outside src #6987
v0.16.0 (2023-09-19)
0.16.0 (2023-09-19)
Features
-
Support creating containers, linear elements, text containers, labelled arrows and arrow bindings programatically #6546
-
Added
props.validateEmbeddable
to customize embeddable src url validation. #6691 -
Add support for
opts.fitToViewport
andopts.viewportZoomFactor
in theExcalidrawAPI.scrollToContent
API. #6581. -
Sidebar component now supports tabs — for more detailed description of new behavior and breaking changes, see the linked PR. #6213
-
Exposed
DefaultSidebar
component to allow modifying the default sidebar, such as adding custom tabs to it. #6213BREAKING CHANGES
props.renderSidebar
is removed in favor of rendering aschildren
.appState.isSidebarDocked
replaced withappState.defaultSidebarDockedPreference
with slightly different semantics, and relating only to the default sidebar. You need to handledocked
state for your custom sidebars yourself.- Sidebar
props.dockable
is removed. To indicate dockability, supplyprops.onDock()
alongside settingprops.docked
. Sidebar.Header
is no longer rendered by default. You need to render it yourself.props.onClose
replaced withprops.onStateChange
.restore()
/restoreAppState()
now retainsappState.openSidebar
regardless of docked state.
Excalidraw Library
This section lists the updates made to the excalidraw library and will not affect the integration.
Features
-
Properly sanitize element
link
urls. #6728. -
allow
avif
,jfif
,webp
,bmp
,ico
image types #6500 -
Zen-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()
andgetFormValue()
. #6957 -
Partition main canvas vertically #6759
-
Add support for simplePDF in Web-Embeds #6810
-
Introducing Web-Embeds (alias iframe element)#6691
-
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
Fixes
-
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 whenUIOptions.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
Styles
Refactor
-
Factor out shape generation from
renderElement.ts
pt 2 #6878 -
Add typeScript support to enforce valid translation keys #6776
-
Simplify
ImageExportDialog
#6578
Performance
-
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
Build
-
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
v0.15.0 (2023-04-18)
Features
ExcalidrawAPI.scrolToContent
has new opts object allowing you to fit viewport to content, and animate the scrolling. #6319Expose
useI18n()
hook return an object containingt()
i18n helper and currentlangCode
. You can use this in components you render as<Excalidraw>
children to render any of our i18n locale strings. #6224restoreElements
API now takes an optional parameteropts
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
BREAKING CHANGE
- The optional parameter
refreshDimensions
inrestoreElements
has been removed and can be enabled viaopts
Fixes
- Exporting labelled arrows via export utils #6443
Excalidraw Library
This section lists the updates made to the excalidraw library and will not affect the integration.
Features
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 67276174+ignacio-cuadra@users.noreply.github.com
Fixes
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" #6400Call stack size exceeded when paste large text #6373 (#6396)
Use
ideographic
textBaseline to improve layout shift when editing text #6384Chrome 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 #6315More 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 #6258Improve 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
Refactor
Inline
SingleLibraryItem
intoPublishLibrary
#6462Make the example React app reusable without duplication #6188
Performance
- Break early if the line width <= max width of the container #6347
Build
- Move TS and types to devDependencies #6346
v0.14.2
0.14.2 (2023-02-01)
Features
- Welcome screen no longer renders by default, and you need to render it yourself.
UIOptions.welcomeScreen
option is now deprecated. #6117 MainMenu
,MainMenu.Item
, andMainMenu.ItemLink
components now all supportonSelect(event: Event): void
callback. If you callevent.preventDefault()
, it will prevent the menu from closing when an item is selected (clicked on). #6152
Fixes
- declare css variable for font in excalidraw so its available in host #6160
Excalidraw Library
This section lists the updates made to the excalidraw library and will not affect the integration.
Features
Add hand/panning tool #6141
Show copy-as-png export button on firefox and show steps how to enable it #6125
Fixes
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
🐛 broken emojis when wrap text #6153Button background and svg sizes #6155
Styles
- Change in ExportButton style #6147 (#6148)
Build
- Temporarily disable pre-commit #6132
v0.14.1
0.14.1 (2023-01-16)
Fixes
- remove overflow hidden from button #6110. This fixes the collaborator count CSS in the LiveCollaborationTrigger component.
v0.14.0 (2023-01-13)
0.14.0 (2023-01-13)
Features
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.
BREAKING CHANGES
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.- The prop
renderFooter
is now removed in favor of rendering as a child component.
Excalidraw schema
- Merged
appState.currentItemStrokeSharpness
andappState.currentItemLinearStrokeSharpness
intoappState.currentItemRoundness
. RenamedchangeSharpness
action tochangeRoundness
. Excalidraw element'sstrokeSharpness
was changed toroundness
. Check the PR for types and more details #5553.
Excalidraw Library
This section lists the updates made to the excalidraw library and will not affect the integration.
Features
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
🔥 #5723Don't add midpoint until dragged beyond a threshold #5927
Changed text copy/paste behaviour #5786
Reintroduce
x
shortcut forfreedraw
#5840Tweak 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
Fixes
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 holdingspacebar
#6015Resize 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 excalidraw-excalidraw-v0.14.0.tgz
ExcalidrawArrowElement
rather thanExcalidrawArrowEleement
#5955RenderFooter 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 #5923Stop replacing
del
word withDelete
#5897Remove 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 #5883Refresh text dimensions only after font load done #5878
Correctly paste contents parsed by
JSON.parse()
as text. #5868SVG 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
Refactor
- Remove unnecessary code #5933
Build
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
0.13.0 (2022-10-27)
0.13.0 (2022-10-27)
Excalidraw API
Features
- Support rendering custom sidebar using
renderSidebar
prop (#5663). - Add
toggleMenu
prop to toggle specific menu open/close state (#5663). - Support theme to be semi-controlled #5660.
- Added support for storing
customData
on Excalidraw elements [#5592]. - Added
exportPadding?: number;
to exportToCanvas and exportToBlob. The default value of the padding is10
.
Breaking Changes
props.UIOptions.canvasActions.theme
is now renamed toprops.UIOptions.canvasActions.toggleTheme
#5660.setToastMessage
API is now renamed tosetToast
API and the function signature is also updated #5427. You can also passduration
andclosable
attributes along withmessage
.
Excalidraw Library
This section lists the updates made to the excalidraw library and will not affect the integration.
Features
Render library into
Sidebar
on mobile #5774Additional 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
🎉 #5501Cursor 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
Fixes
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 #5695Move 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 #5521Context 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
Refactor
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
Build
v0.12.0 (2022-07-06)
0.12.0 (2022-07-07)
Excalidraw API
Features
Add
[UIOptions.dockedSidebarBreakpoint]
(https://github.com/excalidraw/excalidraw/blob/master/src/packages/excalidraw/README.md#dockedSidebarBreakpoint) to customize at which point to break from the docked sidebar #5274.Added support for supplying user
id
in the Collaborator object (seecollaborators
inupdateScene()
), which will be used to deduplicate users when rendering collaborator avatar list. Cursors will still be rendered for every user. #5309Export API to set and reset mouse cursor on the canvas #5215.
Export
sceneCoordsToViewportCoords
andviewportCoordsToSceneCoords
utilities #5187.Added
useHandleLibrary
hook to automatically handle importing of libraries when#addLibrary
URL hash key is present, and potentially for initializing library as well #5115.Also added
parseLibraryTokensFromUrl
to help in manually importing library from URL if desired.BREAKING CHANGE
- Libraries are no longer automatically initialized from URL when
#addLibrary
hash key is present. Host apps now need to handle this themselves with the help of either of the above APIs (useHandleLibrary
is recommended).
- Libraries are no longer automatically initialized from URL when
Added
updateLibrary
API to update (replace/merge) the library #5115.BREAKING CHANGE
updateScene
API no longer supports passinglibraryItems
. Instead, use theupdateLibrary
API.
Add support for integrating custom elements #5164.
- Add
onPointerDown
callback which gets triggered on pointer down events. - Add
onScrollChange
callback which gets triggered when scrolling the canvas. - Add API
setActiveTool
which host can call to set the active tool.
- Add
Exported
loadSceneOrLibraryFromBlob
function #5057.Export
MIME_TYPES
supported by Excalidraw #5135.Support
avatarUrl
for collaborators. Now onwards host can passavatarUrl
to render the customized avatar for collaborators #5114, renamed in #5177.Support
libraryItems
argument ininitialData.libraryItems
andupdateScene({ libraryItems })
to be a Promise resolving toLibraryItems
, and support functional update oflibraryItems
inupdateScene({ libraryItems })
. #5101.Expose util
mergeLibraryItems
#5101.Expose util
exportToClipboard
which allows to copy the scene contents to clipboard assvg
,png
orjson
#5103.Expose
window.EXCALIDRAW_EXPORT_SOURCE
which you can use to overwrite thesource
field in exported data #5095.The
exportToBlob
utility now supports theexportEmbedScene
option when generating a png image #5047.Exported
restoreLibraryItems
API #4995.
Fixes
Allow returning
null
inrenderFooter
prop #5282.Transpile
browser-fs-access
dependency so that itsfor await
syntax doesn't forcees2018
requirement onto dependent projects #5041.Use
window.EXCALIDRAW_ASSET_PATH
for fonts when exporting to svg #5065.Library menu now properly rerenders if open when library is updated using
updateScene({ libraryItems })
#4995.
Refactor
- Rename
appState.elementLocked
toappState.activeTool.locked
#4983. - Expose
serializeLibraryAsJSON
helper that we use when saving Excalidraw Library to a file.
BREAKING CHANGE
You will need to pass activeTool.locked
instead of elementType
from now onwards in appState
.
- Rename
appState.elementType
toappState.activeTool
which is now an object #4698.
BREAKING CHANGE
You will need to pass activeTool
instead of elementType
from now onwards in appState
Build
- Use only named exports #5045.
BREAKING CHANGE
You will need to import the named export from now onwards to use the component
Using bundler
import { Excalidraw } from "@excalidraw/excalidraw";
In Browser
React.createElement(ExcalidrawLib.Excalidraw, opts);
Excalidraw Library
This section lists the updates made to the excalidraw library and will not affect the integration.
Features
Throttle scene rendering to animation framerate #5422
Make toast closable and allow custom duration #5308
Collab component state handling rewrite & fixes #5046
Support debugging PWA in dev #4853
Redirect vscode.excalidraw.com to vscode marketplace #5285
Go-to-excalidrawplus button #5202
Autoredirect to Excalidraw+ if special cookie is present #5183
Support resubmitting published library items #5174
Support adding multiple library items on canvas #5116
Support customType in activeTool #5144
Stop event propagation when key handled #5091
Rewrite library state management & related refactor #5067
Delay initial loading message & tweak design #5049
Reconcile when saving to firebase #4991
Hide trash button during collaboration #5037
Refactor local persistence & fix race condition on SW reload #5032
Element locking #4964
Copy to clipboard all text nodes as text #5013
Create and expose serializeLibraryAsJSON #5009
Hide penMode button on reload if not enabled #4992
Eraser toggle to switch back to the previous tool #4981
Save penDetected and penMode, and detect pen already on ToolButton click #4955
Support binding text to container via context menu #4935
Map shortcut O to ellipse and Add eraser shortcut E #4930
Update eraser cursor #4922
Add Eraser
🎉 #4887Added optional REACT_APP_WS_SERVER_URL for forks usecases #4889
Rewrite collab server connecting #4881
Support vertical text align for bound containers #4852
Support custom colors
🎉 #4843Support Links in Exported SVG #4791
Scale font size when bound text containers resized with shift pressed #4828
Fixes
Autorelease job name #5412
Action name for autorelease #5411
Typecast file to fix the build #5410
File handle not persisted when importing excalidraw files #5372
Library not scrollable when no published items installed #5352
Focus traps inside popovers #5317
Unable to use cmd/ctrl-delete/backspace in inputs #5348
Delay loading until language imported #5344
Command to trigger release #5347
Remove unnecessary options passed to language detector #5336
Stale
appState.pendingImageElement
#5322Non-letter shortcuts being swallowed by color picker #5316
Bind text to correct container when nested #5307
Copy bound text style when copying element having bound text #5305
Copy arrow head when using copy styles #5303
Unsafely accessing draggingElement #5216
Library load button does not work #5205
Do not deselect when not zooming using touchscreen pinch #5181
Wheel zoom normalization #5165
Hide sidebar when
custom
tool active #5179Don't save deleted ExcalidrawElements to Firebase #5108
Eraser removed deleted elements #5155
Handle
ColorPicker
parentSelector being undefined #5152Library multiselect not accounting for published state #5132
Chart display fix #5154
Update opacity of bound text when opacity of container updated #5142
Jumping of text when typing single line in bound text #5139
Remove opacity scroll wheel interaction #5111
Propagate keydown events from excalidraw-wysiwyg inputs #5099
Don't bind text to container if double clicked else instead of center #5105
ToolIcon height not using rem #5092
Excalidraw named export type #5078
BoundElementIds when arrows bound to elements are deleted #5077
Don't merge libraryItems on updateScene #5076
SVG metadata extraction regex on multiline elements #5074
Eraser cursor showing on theme change when not using eraser #4990
Update
storage.rules
#5020Add image button not working on iPad #5038
Ensure svg image dimensions are always set #5044
Pinch zoom in view mode #5001
Select whole group on righclick & few lock-related fixes #5022
Export serializeLibraryAsJSON from the package #5017
Support copying PNG to clipboard on Safari #3746
More copyText fixes #5016
Copy to clipboard all text nodes as text #5014
Update cursorButton once freedraw is released #4996
Decouple actionFinalize and actionErase #4984
Using stale state when switching tools #4989
UpdateWysiwygStyle updatedElement is undefined TypeError #4980
Adding check for link length to prevent early return #4982
Show link icon for bound text containers #4960
Cancel erase elements on pointer up if eraser is not active on pointer up #4956
Restore original opacities when alt pressed while erasing #4954
Don't bind text to container if already present #4946
Erase all elements which are hit with single point click #4934
Add multiElement-edit finalize action to Desktop (currently only visible in Mobile view) #4764
Hide eraser in view mode in desktop #4929
Undo when erasing elements by clicking #4921
Undo when erasing #4900
Incorrectly erasing on mobile #4899
Don't crash on drop highlighted text onto canvas #4890
Paste styles shortcut #4886
Freedraw element's background fill color missing from SVG when exporting with package API exportToSvg() #4871
Improve pointer syncing performance #4883
Collab room initialization #4882
Ensure verticalAlign properties not shown when no element selected #4860
Binding text to non-bindable containers and not always preferring selection #4655
Don't show align icons for single bound container element #4846
Redraw text bounding box when pasting styles #4845
Restore cursor position after bound text container value updated #4836
Support resizing multiple bound text containers #4824
Also check overflowY: overlay in detectScroll #4806
Stuck resizing when resizing bound text container very fast beyond threshold #4804
Refactor
- Don't pass array to handleBindTextResize #4826
Build
Extract all i18n files into locales folder #5419
Automate release step fully #5414
Use next and preview tags instead of separate packages for next and preview release #5346
Support runtime React Jsx in @excalidraw/utils #4866
Release @excalidraw/utils 0.1.1 #4862
Remove build packages workflow #4835