Cập nhật
Phiên bản mới nhất của các app trong kho, kèm ghi chú phát hành từ nhà phát triển.
Phiên bản 9.10.0
Tự định dạng code JavaScript, TypeScript, CSS, Markdown… mỗi khi lưu file trong VS Code.
See CHANGE LOG for details.
Phiên bản 0.63
Sắp xếp và đổi kích thước cửa sổ trên macOS bằng phím tắt hoặc kéo vào cạnh màn hình.
Full Changelog: v0.62...v0.63
Phiên bản 0.61
Sắp xếp và đổi kích thước cửa sổ trên macOS bằng phím tắt hoặc kéo vào cạnh màn hình.
Full Changelog: v0.60...v0.61
Phiên bản 0.60
Sắp xếp và đổi kích thước cửa sổ trên macOS bằng phím tắt hoặc kéo vào cạnh màn hình.
Full Changelog: v0.59...v0.60
Phiên bản 9.9.0
Tự định dạng code JavaScript, TypeScript, CSS, Markdown… mỗi khi lưu file trong VS Code.
See CHANGE LOG for details.
Phiên bản 0.59
Sắp xếp và đổi kích thước cửa sổ trên macOS bằng phím tắt hoặc kéo vào cạnh màn hình.
Full Changelog: v0.58...v0.59
Phiên bản 0.58
Sắp xếp và đổi kích thước cửa sổ trên macOS bằng phím tắt hoặc kéo vào cạnh màn hình.
Full Changelog: v0.57...v0.58
Phiên bản 9.8.0
Tự định dạng code JavaScript, TypeScript, CSS, Markdown… mỗi khi lưu file trong VS Code.
See CHANGE LOG for details.
Phiên bản 9.6.0
Tự định dạng code JavaScript, TypeScript, CSS, Markdown… mỗi khi lưu file trong VS Code.
See CHANGE LOG for details.
Phiên bản 0.12.0
Vẽ sơ đồ và phác thảo kiểu vẽ tay ngay trên trình duyệt, vẽ chung theo thời gian thực.
loadLibraryFromBlob now takes an additional parameter defaultStatus which sets the default status of library item if not present, defaults to unpublished #5067.
Add UIOptions.dockedSidebarBreakpoint to customize at which point to break from the docked sidebar #5274.
Added support for supplying user id in the Collaborator object (see collaborators in updateScene()), which will be used to deduplicate users when rendering collaborator avatar list. Cursors will still be rendered for every user. #5309
Export API to set and reset mouse cursor on the canvas #5215.
Export sceneCoordsToViewportCoords and viewportCoordsToSceneCoords 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.
#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).Added updateLibrary API to update (replace/merge) the library #5115.
updateScene API no longer supports passing libraryItems. Instead, use the updateLibrary API.Add support for integrating custom elements #5164.
onPointerDown callback which gets triggered on pointer down events.onScrollChange callback which gets triggered when scrolling the canvas.setActiveTool which host can call to set the active tool.Exported loadSceneOrLibraryFromBlob function #5057.
Export MIME_TYPES supported by Excalidraw #5135.
Support avatarUrl for collaborators. Now onwards host can pass avatarUrl to render the customized avatar for collaborators #5114, renamed in #5177.
Support libraryItems argument in initialData.libraryItems and updateScene({ libraryItems }) to be a Promise resolving to LibraryItems, and support functional update of libraryItems in updateScene({ libraryItems }). #5101.
Expose util mergeLibraryItems #5101.
Expose util exportToClipboard which allows to copy the scene contents to clipboard as svg, png or json #5103.
Expose window.EXCALIDRAW_EXPORT_SOURCE which you can use to overwrite the source field in exported data #5095.
The exportToBlob utility now supports the exportEmbedScene option when generating a png image #5047.
Exported restoreLibraryItems API #4995.
Allow returning null in renderFooter prop #5282.
Transpile browser-fs-access dependency so that its for await syntax doesn't force es2018 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.
appState.elementLocked to appState.activeTool.locked #4983.serializeLibraryAsJSON helper that we use when saving Excalidraw Library to a file.You will need to pass activeTool.locked instead of elementType from now onwards in appState.
appState.elementType to appState.activeTool which is now an object #4698.You will need to pass activeTool instead of elementType from now onwards in appState
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);
This section lists the updates made to the excalidraw library and will not affect the integration.
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 🎉 #4887
Added 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 🎉 #4843
Support Links in Exported SVG #4791
Scale font size when bound text containers resized with shift pressed #4828
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 #5322
Non-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 #5179
Don't save deleted ExcalidrawElements to Firebase #5108
Eraser removed deleted elements #5155
Handle ColorPicker parentSelector being undefined #5152
Library 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 #5020
Add 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
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
Phiên bản 0.57
Sắp xếp và đổi kích thước cửa sổ trên macOS bằng phím tắt hoặc kéo vào cạnh màn hình.
Full Changelog: v0.56...v0.57
Phiên bản 0.56
Sắp xếp và đổi kích thước cửa sổ trên macOS bằng phím tắt hoặc kéo vào cạnh màn hình.
Fixing incorrect calculations for screen edge gaps
Phiên bản 0.55
Sắp xếp và đổi kích thước cửa sổ trên macOS bằng phím tắt hoặc kéo vào cạnh màn hình.
Phiên bản 9.5.0
Tự định dạng code JavaScript, TypeScript, CSS, Markdown… mỗi khi lưu file trong VS Code.
See CHANGE LOG for details.
Phiên bản 9.4.0
Tự định dạng code JavaScript, TypeScript, CSS, Markdown… mỗi khi lưu file trong VS Code.
See CHANGE LOG for details.
Phiên bản 9.3.0
Tự định dạng code JavaScript, TypeScript, CSS, Markdown… mỗi khi lưu file trong VS Code.
See CHANGE LOG for details.
Phiên bản 0.11.0
Vẽ sơ đồ và phác thảo kiểu vẽ tay ngay trên trình duyệt, vẽ chung theo thời gian thực.
Add onLinkOpen prop which will be triggered when clicked on element hyperlink if present #4694.
Support updating library using updateScene API #4546.
Introduced primary colors to the app. The colors can be overriden. Check readme on how to do so #4387.
exportToBlob now automatically sets appState.exportBackground to true if exporting to image/jpeg MIME type (to ensure that alpha channel is not compressed to black color) #4342.
Remove getElementMap util #4306.
Changes to exportToCanvas util function #4321:
maxWidthOrHeight?: number attribute.scale returned from getDimensions() is now optional (default to 1).Image support added for host PR
General notes:
ExcalidrawAPI:
getFiles() to get current BinaryFiles (Record<FileId, BinaryFileData>). It may contain files that aren't referenced by any element, so if you're persisting the files to a storage, you should compare them against stored elements.Excalidraw app props:
generateIdForFile(file: File) optional prop so you can generate your own ids for added files.onChange(elements, appState, files) prop callback is now passed BinaryFiles as third argument.onPaste(data, event) data prop should contain data.files (BinaryFiles) if the elements pasted are referencing new files.initialData object now supports additional files (BinaryFiles) attribute.Other notes:
.excalidraw files may now contain top-level files key in format of Record<FileId, BinaryFileData> when exporting any (image) elements.files, you can refer to the docs for the same.Export isLinearElement and getNonDeletedElements #4072.
Support renderTopRightUI in mobile UI #4065.
Export THEME constant from the package so host can use this when passing the theme #4055.
The Appearance type is now removed and renamed to Theme so Theme type needs to be used.
unmounted state on the component once component mounts to fix the mounting/unmounting repeatedly when used with useEffect #4682.mousewheel-drag and space-drag now prevents the browser from scrolling the container/page #4489. @excalibot trigger release
#4750.
Added an example to test and develop the package locally using yarn start #4488
Remove file-loader so font assets are not duplicated by webpack and use webpack asset modules for font generation #4380.
We're now compiling to es2017 target. Notably, async/await is not compiled down to generators. #4341.
This section lists the updates made to the excalidraw library and will not affect the integration.
Show group/group and link action in mobile #4795
Support background fill for freedraw shapes #4610
Keep selected tool on canvas reset #4728
Make whole element clickable in view mode when it has hyperlink #4735
Allow any precision when zooming #4730
Throttle pointermove events per framerate #4727
Support hyperlinks 🔥 #4620
Added penMode for palm rejection #4657
Support unbinding bound text #4686
Sync local storage state across tabs when out of sync #4545
Support contextMenuLabel to be of function type to support dynmaic labels #4654
Support decreasing/increasing fontSize via keyboard #4553
Link to new LP for excalidraw plus #4549
Update stroke color of bounded text along with container #4541
Hints and shortcuts help around deep selection #4502
Support updating text properties by clicking on container #4499
Bind text to shapes when pressing enter and support sticky notes 🎉 #4343
Change boundElementIds → boundElements #4404
Support selecting multiple points when editing line #4373
Horizontally center toolbar menu commit link
Add support for rounded corners in diamond #4369
Allow zooming up to 3000% #4358
Stop discarding precision when rendering #4357
Support Image binding #4347
Add element.updated #4070
Compress shareLink data when uploading to json server #4225
Supply version param when installing libraries #4305
Log FS abortError to console #4279
Add validation for website and remove validation for library item name #4269
Allow publishing libraries from UI #4115
Create confirm dialog to use instead of window.confirm #4256
Allow letters in IDs for storing files in backend #4224
Remove support for V1 unencrypted backend #4189
Use separate backend for local storage #4187
Add hint around canvas panning #4159
Stop using production services for development #4113
Add triangle arrowhead #4024
Add rewrite to webex landing page #4102
Switch collab server #4092
Use dialog component for clear canvas instead of window confirm #4075
Rename --color-primary-chubb to --color-primary-contrast-offset and fallback to primary color if not present #4803
Add commits directly pushed to master in changelog #4798
Don't bump element version when adding files data #4794
Mobile link click #4742
ContextMenu timer & pointers not correctly reset on iOS #4765
Use absolute coords when rendering link popover #4753
Changing font size when text is not selected or edited #4751
Disable contextmenu on non-secondary pen events or touch #4675
Mobile context menu won't show on long press #4741
Do not open links twice #4738
Make link icon clickable in mobile #4736
Apple Pen missing strokes #4705
Freedraw slow movement jittery lines #4726
Disable three finger pinch zoom in penMode #4725
Remove click listener for opening popup #4700
Link popup position not accounting for offsets #4695
PenMode darkmode style #4692
Typing _+ in wysiwyg not working #4681
Keyboard-zooming in wysiwyg should zoom canvas #4676
SceneCoordsToViewportCoords, jumping text when there is an offset #4413 (#4630)
Right-click object menu displays partially off-screen #4572 (#4631)
Support collaboration in bound text #4573
Cmd/ctrl native browser behavior blocked in inputs #4589
Use cached width when calculating min width during resize #4585
Support collaboration in bounded text #4580
Port for collab server and update docs #4569
Don't mutate the bounded text if not updated when submitted #4543
Prevent canvas drag while editing text #4552
Support shift+P for freedraw #4550
Prefer spreadsheet data over image #4533
Show text properties button states correctly for bounded text #4542
Rotate bounded text when container is rotated before typing #4535
Undo should work when selecting bounded textr #4537
Reduce padding to 5px for bounded text #4530
Bound text doesn't inherit container #4521
Text wrapping with grid #4505 (#4506)
Check if process is defined before using so it works in browser #4497
Pending review fixes for sticky notes #4493
Pasted elements except binded text once paste action is complete #4472
Don't select binded text when ungrouping #4470
Set height correctly when text properties updated while editing in container until first submit #4469
Align and distribute binded text in container and cleanup #4468
Move binded text when moving container using keyboard #4466
Support dragging binded text in container selected in a group #4462
Vertically align single line when deleting text in bounded container #4460
Update height correctly when updating text properties in binded text #4459
Align library item previews to center #4447
Vertically center align text when text deleted #4457
Vertically center the first line as user starts typing in container #4454
Switch cursor to center of container when adding text when dimensions are too small #4452
Vertically center align the bounded text correctly when zoomed #4444
Support updating stroke color for text by typing in color picker input #4415
Bound text not atomic with container when changing z-index #4414
Update viewport coords correctly when editing text #4416
Use word-break break-word only and update text editor height only when binded to container #4410
Husky not able to execute pre-commit on windows #4370
Make firebase config parsing not fail on undefined env #4381
Adding to library via contextmenu when no image is selected #4356
Export scale quality regression #4316
Remove 100% height from tooltip container to fix layout issues #3980
Inline ENV variables when building excalidraw package #4311
SVG export in dark mode with embedded bitmap image #4285
New FS API not working on Linux #4280
Url -> URL for consistency #4277
Prevent adding images to library via contextMenu #4264
Account for libraries v2 when prompting #4263
Skia rendering issues #4200
Ellipse roughness when 0 #4194
Proper string for invalid SVG #4191
Images not initialized correctly #4157
Image-related fixes #4147
Rewrite collab element reconciliation to fix z-index issues #4076
Redirect excalidraw.com/about to for-webex.excalidraw.com #4104
Redirect to webex LP instead of rewrite to fix SW #4103
Clear image/shape cache of affected elements when adding files #4089
Clear LibraryUnit DOM on unmount #4084
Pasting images on firefox #4085
Simplify zoom by removing zoom.translation #4477
Deduplicate encryption helpers #4146
Rename release command to 'release package' #4783
Deploy excalidraw package example #4762
Allow package.json changes when autoreleasing next #4068
Phiên bản 0.13.0
Vẽ sơ đồ và phác thảo kiểu vẽ tay ngay trên trình duyệt, vẽ chung theo thời gian thực.
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
Add missing dependencies: pica, lodash #5656
Move dotenv to dev deps #5472
Phiên bản 9.7.0
Tự định dạng code JavaScript, TypeScript, CSS, Markdown… mỗi khi lưu file trong VS Code.
See CHANGE LOG for details.
Full Changelog: v0.53...v0.54