David Luzar and Márk Tolmács
854d00c31b
feat(editor): track element creation timestamps ( #12060 )
...
feat(editor): element creation timestamp tracking
Co-authored-by: Márk Tolmács <mark@lazycat.hu >
2026-09-08 15:26:14 +02:00
David Luzar
2b1c2a9fbf
fix(editor): dismiss dropdown menus on outside clicks ( #12053 )
...
fix: dismiss dropdown menus on outside clicks
2026-09-07 17:28:20 +02:00
David Luzar and Claude Fable 5.1
f1a79b73df
perf(editor): stop inverting the interactive canvas via CSS filter in dark mode ( #12050 )
...
The interactive canvas (selection outlines, transform handles, binding
highlights, collaborator cursors, snap lines, scrollbars) was still
composited through `filter: invert(93%) hue-rotate(180deg)` in dark mode
(#10578 only de-filtered the static canvas). The canvas covers the whole
viewport and repaints on nearly every pointer move, so browsers that
composite in software (Firefox/Zen on software WebRender or with hardware
acceleration disabled) paid for a full-viewport color-matrix pass per frame
and dropped from 120fps to ~40fps during marquee/drag. Light mode was
unaffected.
Colors are now mapped in JS via `applyDarkModeFilter`, like the static
canvas. Hardcoded dark-mode values are the exact post-filter equivalents of
the previous ones, so rendering is unchanged, with two intentional
exceptions:
- collaborator cursors and remote selection outlines render in the
collaborators' actual colors (matching their avatars) instead of inverted
ones (per the existing TODO in clients.ts)
- the lasso trail now uses the theme's `--color-selection` like the marquee
selection, instead of a hardcoded light-theme purple that never matched in
dark mode
`--color-selection` for the dark theme now holds the actual rendered color
(#b4b0ff); hosts overriding it no longer need to pre-invert.
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com >
2026-09-07 11:52:22 +02:00
David Luzar
4a6f4e7a32
feat(app): d2c streaming ( #11960 )
...
* support d2c streaming
* render status spinner while streaming
* enable analytics for ai
2026-08-25 16:08:37 +02:00
David Luzar
abeeaeba21
feat(editor): customizing color top picks ( #11872 )
2026-08-11 15:59:35 +02:00
David Luzar and rafa
cf212b2f33
feat(editor): eyedropper fixes and improvements ( #11859 )
...
Co-authored-by: rafa <rafaondjango@gmail.com >
2026-08-08 23:17:26 +02:00
David Luzar
4872083c04
feat(editor): bucketfill cursor + eyedropper support ( #11849 )
2026-08-07 14:07:53 +02:00
David Luzar
ea74787447
fix(app): remove ViewportStatusFrame debug ( #11848 )
2026-08-07 12:53:21 +02:00
David Luzar
219571a718
fix(editor): viewportportStatusFrame UI fixes ( #11841 )
2026-08-06 22:01:48 +02:00
David Luzar
e4ab626739
feat(packages/excalidraw): add props.className ( #11839 )
2026-08-05 20:10:18 +02:00
David Luzar
1e22618ab2
fix(packages/excalidraw): viewportStatusFrame label offset on mobile ( #11840 )
2026-08-05 20:00:18 +02:00
David Luzar
74789584be
feat(packages/excalidraw): support ViewportStatusFrame label onClick ( #11838 )
2026-08-05 18:28:52 +02:00
David Luzar
e33a1c0e85
feat(packages/excalidraw): do not dedupe collaborators ( #11835 )
2026-08-05 14:20:18 +02:00
David Luzar
5e375b4331
fix(editor): do not flicker bbox when drag-creating line midpoint ( #11834 )
2026-08-05 10:52:10 +02:00
David Luzar and Tamas Lakatos
85270fcc8d
feat(packages/excalidraw): ViewportStatusFrame & factor out user-follow state ( #11819 )
...
Co-authored-by: Tamas Lakatos <tamas@excalidraw.com >
2026-08-05 00:01:20 +02:00
David Luzar
c9c96f619c
fix(editor): normalize container + bound text order on restore ( #11827 )
2026-08-04 23:32:15 +02:00
David Luzar
1da120e914
fix(editor): include custom tools in pointer capture ( #11826 )
2026-08-04 19:39:21 +02:00
792ea3a06c
feat(editor): bucket fill ( #11799 )
...
Co-authored-by: Claude Fable 5 <noreply@anthropic.com >
Co-authored-by: Mark Tolmacs <mark@lazycat.hu >
Signed-off-by: Mark Tolmacs <mark@lazycat.hu >
2026-08-04 16:25:16 +02:00
David Luzar
f1aa8f86a9
feat(editor): disable arrowhead toggle via dblclick ( #11822 )
2026-08-04 16:25:00 +02:00
David Luzar
1acf66edab
feat(editor): bind text to hovered arrow endpoint ( #11777 )
2026-07-28 18:12:33 +02:00
David Luzar
7c0b329576
fix(editor): increase autoresize handle threshold until it hides ( #11773 )
2026-07-27 23:04:03 +02:00
David Luzar
b2e81e38a6
feat(editor): autoshape text + line improvements ( #11752 )
2026-07-24 16:10:00 +02:00
David Luzar
a1d9b16b0d
fix(editor): show scroll-back-to-content button on mobile ( #11680 )
2026-07-17 16:22:43 +02:00
David Luzar
65aa577e39
fix(editor): fix AnimationController scheduling race conds ( #11678 )
2026-07-16 20:52:06 +02:00
David Luzar
93dd51060a
feat(packages/excalidraw): add props.ui.enabled.zoom/scrollBackToContent ( #11677 )
2026-07-16 19:50:19 +02:00
David Luzar
344878b0b5
ci(repo): skip docs & example deployments in CI ( #11674 )
2026-07-16 14:36:11 +00:00
David Luzar
374716304a
fix(editor): improve UX around locked animations ( #11671 )
2026-07-16 13:30:13 +02:00
David Luzar
5ca083436d
feat(packages/excalidraw): add props.activeTool and related ( #11665 )
2026-07-15 11:46:08 +02:00
David Luzar
acb48c3f45
fix(editor): make embeddable ignore higher-z-index non-framelike elements ( #11662 )
2026-07-14 18:18:21 +02:00
David Luzar and Claude Fable 5
2423819ee0
feat(packages/excalidraw): interaction and UI control ( #11605 )
...
* feat(packages/excalidraw): add `props.interaction` and `props.ui`
* fix: prevent browser zoom when interaction disabled
* changelog
* clean up interactive state on disable and consolidate `viewMode` and interaction state updates
* render UI rendered to `children` even if editor-exported
* support `allowed.navigation` and `allowed.embeds/interactiveContent`
* change naming `allowed` -> `enabled`
* changelog: add PR links
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
* clear flowchart sessions via consolidated `app.flowchart` after master merge
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
* refactor getters -> methods
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com >
2026-07-14 16:50:53 +02:00
David Luzar
339d3c3733
feat(editor): toolbar / active tool rewrites ( #11649 )
2026-07-13 00:30:09 +02:00
David Luzar
f790bf7abd
feat(editor): tweak sidebar promo style ( #11181 )
2026-07-09 11:41:13 +02:00
David Luzar and DataVoyager-Aditya
063e0256f5
fix(editor): arrow label rendering fixes and perf improvements ( #11637 )
...
Co-authored-by: DataVoyager-Aditya <rajthakuraditya63@gmail.com >
2026-07-08 23:13:01 +02:00
David Luzar
b2a729c400
feat(editor): dblclick to toggle arrowhead ( #11615 )
2026-07-07 14:22:21 +02:00
David Luzar
aaa14e9df6
feat(editor): show cursor hint when switching arrow types ( #11608 )
2026-07-07 12:55:32 +02:00
David Luzar
9357f98a9b
fix(editor): optimize UI rendering during animation ( #11604 )
2026-07-05 18:44:26 +02:00
David Luzar
5b0f5a4c2d
fix(editor): revert viewport animation back to 500ms ( #11600 )
2026-07-05 09:45:59 +02:00
David Luzar
c070c8ffa6
fix(editor): improve scroll animation interpolation ( #11562 )
2026-06-26 09:56:12 +02:00
David Luzar
2a82821ec5
fix(editor): tweak freedraw settings and tablet UI/UX ( #11551 )
...
* fix(editor): align constant freedraw stroke width more with generic shapes
* reduce streamline for non-mouse
* do not change `currentItemStrokeVariability` unintentionally
* render penMode button under compact styles panel on tablets
* show stroke variability as standalone button in compact actions menu
* improve toolbar clicking UX with pen
* change streamline defaults
* change to `variable` stroke if toggling penMode for the first time
2026-06-24 16:59:10 +02:00
David Luzar
28a9b1711d
test(repo): less noisy test output ( #11505 )
2026-06-15 18:19:20 +02:00
David Luzar and Diego Mateos
069982606d
fix(editor): update element.frameId on frame change ( #11490 )
...
Co-authored-by: Diego Mateos <dimateos@ucm.es >
2026-06-13 22:39:04 +02:00
David Luzar
b324a85ab1
fix(editor): elements duplicated when moving frame children ( #11485 )
...
* fix(editor): elements duplicated when moving frame children
* fix(editor): accumulate reorders across frames in bring-to-front/back
* add invalid-order tests
* fix: make sure moved indices are within range
* add length/duplicate elements guards
2026-06-13 20:32:45 +02:00
David Luzar
647a264a48
feat(packages/excalidraw): consolidate theme state handling ( #11453 )
2026-06-06 18:18:06 +02:00
David Luzar
3372149277
feat(packages/excalidraw): export applyDarkModeFilter and simplify ( #11429 )
2026-06-01 15:43:45 +02:00
David Luzar
c08be69618
ci(docker): fix docker dep bundling and pin remaining actions ( #11398 )
...
* docker: use slim alpine image to remove bundling deps in Docker image
* pin remaining yml actions
* use lockfile
* remove pulling
2026-05-25 14:39:21 +02:00
David Luzar
f6d85bc80f
feat(packages/excalidraw): expose image size config and optimize resizing ( #11332 )
2026-05-14 22:45:03 +02:00
David Luzar
0457ac9063
fix(editor): handle invalid points on restore ( #11321 )
...
* fix: handle invalid points on restore
* move isValidPoint to @excalidraw/math
2026-05-12 18:44:49 +02:00
David Luzar
97274a74b2
ci(repo): enforce scopes ( #11292 )
2026-05-06 19:54:30 +02:00
David Luzar
d2557474e2
fix(editor): fix target element index when creating/adding elements to frames ( #11257 )
2026-05-05 21:35:32 +02:00
David Luzar
3f5fdec04e
fix: group defragmenting ( #11269 )
2026-05-02 15:50:58 +02:00
David Luzar
278cd35772
feat(editor): scale video embeddables based on zoom ( #11251 )
2026-04-28 21:49:40 +02:00
David Luzar
43fa4b5602
fix: frame selection and membership ( #11250 )
...
fix: element fully overlapping frame
2026-04-28 18:23:10 +02:00
David Luzar
b1c6bfcf40
chore(docker): bump node ( #11208 )
2026-04-20 22:07:00 +02:00
David Luzar and Mark Tolmacs
d9e8a33aa4
feat(editor): implement overlap box selection ( #11053 )
...
Co-authored-by: Mark Tolmacs <mark@lazycat.hu >
2026-04-01 18:41:11 +02:00
David Luzar
4a5c9e990c
fix(editor): ensure font picker font names are not quoted ( #11036 )
2026-03-25 17:56:48 +01:00
c09e170bdd
feat(editor): deselect on esc ( #11035 )
...
Co-authored-by: Jawahar <jawahars_16@live.in >
Co-authored-by: Andrew Aquino <dawneraq@gmail.com >
2026-03-25 17:14:24 +01:00
David Luzar
c1082923ee
feat(editor): support mermaid staate diagrams ( #11031 )
2026-03-24 20:20:28 +01:00
David Luzar
a9ca16eb42
chore(packages/excalidraw): export Fonts helper class ( #11008 )
2026-03-21 22:44:27 +01:00
David Luzar
81ab857a6f
feat(editor): various text related improvements ( #10979 )
2026-03-19 16:00:58 +01:00
David Luzar
e8b4620a96
feat(editor): put caret at pointer coords when clicking on selected text element ( #10970 )
2026-03-18 19:14:44 +01:00
David Luzar
2b0e4c9623
fix(editor): remove leftover debug code path ( #10954 )
2026-03-14 13:12:48 +01:00
David Luzar
c9ba7f839c
chore(editor): bump @excalidraw/mermaid-to-excalidraw@2.1.1 ( #10944 )
2026-03-12 17:32:13 +01:00
David Luzar
b4ce7c713b
fix(editor): arrowhead picker overflowing viewport ( #10943 )
2026-03-12 16:08:46 +01:00
David Luzar
816c81c12e
feat(editor): ERD arrowheads and diagrams ( #10940 )
2026-03-11 22:00:31 +01:00
David Luzar
92d25446d6
feat(packages/excalidraw): tweak and expose more API around state and lifecycle ( #10939 )
2026-03-11 16:51:03 +01:00
David Luzar
e73a5b0116
docs(packages/excalidraw): improve readme ( #10932 )
2026-03-11 09:49:12 +01:00
David Luzar
21dd1cfacc
feat(packages/excalidraw): state tracking, api hook, and others ( #10870 )
2026-03-08 23:15:18 +01:00
David Luzar
fa1f7d9f22
feat(packages/excalidraw): export throttleRAF ( #10912 )
2026-03-07 12:05:33 +01:00
David Luzar
3d8c12fba4
fix(editor): do not conditionally disable midpoint snapping menu preference ( #10906 )
2026-03-06 20:44:57 +01:00
757dfeb6ad
fix(editor): call throttleRAF with lastArgs and remove trailing ( #10905 )
...
Co-authored-by: Varun Chawla <varun_6april@hotmail.com >
Co-authored-by: aziamimoh <aziamimoh@users.noreply.github.com >
Co-authored-by: pgzcoa <pgzcoa@users.noreply.github.com >
Co-authored-by: TinaZhang24 <TinaZhang24@users.noreply.github.com >
2026-03-06 20:40:36 +01:00
David Luzar
a0e93b6040
feat(editor): sync export theme with ui theme ( #10903 )
2026-03-06 18:37:28 +01:00
David Luzar
c1dbbdf678
feat(editor): mermaid code editor & improve parsing ( #10897 )
2026-03-05 18:52:41 +01:00
David Luzar
47c254216b
fix(editor): disable snap-to-midpoint menu item when arrow-binding disabled ( #10885 )
2026-03-04 16:48:33 +01:00
David Luzar
60b275880d
feat(editor): support radar chart and multiple series for other chart types ( #10824 )
2026-02-26 16:13:15 +01:00
David Luzar
2874f9e48c
fix(editor): simplify and fix midpoint highlighting ( #10832 )
2026-02-24 21:11:46 +01:00
David Luzar
b0404b10b6
chore(debug): add debug.logChanged() and make easy to import ( #10828 )
2026-02-23 20:20:37 +01:00
David Luzar
eb959128ac
feat(editor): allow laser-pointing in view mode ( #10802 )
...
* feat(editor): allow laser pointing in view mode
* feat: allow switching between laser/hand in view mode
* fix lint
* factor out to utils
* fix: only handle primary clicks with the selection/laser tools
2026-02-20 22:49:46 +01:00
4c3d037f9c
feat(editor): allow clicking on links and embeds with laser tool ( #10797 )
...
Co-authored-by: Anvi <anvikudaraya417@gmail.com >
Co-authored-by: Chris Tangonan <ctangonan123@gmail.com >
2026-02-19 11:45:01 +01:00
David Luzar
46ddd60948
feat(editor): support embedding google drive videos ( #10788 )
2026-02-16 22:19:11 +01:00
David Luzar
3a5ef4020d
feat(app): add preferences to main menu ( #10760 )
...
feat(editor): add preferences to main menu
2026-02-08 23:30:45 +01:00
David Luzar and Barnabás Molnár
063533aede
feat(packages/excalidraw): support nested dropdown menu ( #10749 )
...
Co-authored-by: Barnabás Molnár <38168628+barnabasmolnar@users.noreply.github.com >
2026-02-08 22:27:34 +01:00
David Luzar
83d3943cd0
feat(editor): reduce binding gap ( #10739 )
...
* feat(editor): reduce binding gap to 7px
* feat(editor): reduce binding gap to 5px
* feat(editor): reduce binding gap to 3px
* go back to 5px
* update tests
2026-02-05 12:00:56 +01:00
David Luzar
54a9826817
fix(editor): copying to clipboard with no ClipboardEvent ( #10729 )
...
* fix(editor): copying to clipboard with no ClipboardEvent
* fix(editor): use green for `success` state of `FilledButton`
2026-02-01 11:06:37 +01:00
David Luzar
d29fd62e41
fix(editor): crop editor cursor drift ( #10727 )
...
* fix(editor): do not scale cropping editor pointer offsets
* fix lint
* fix more lint
* fix drift related to image canvas scale
2026-02-01 10:45:04 +01:00
David Luzar
b57f3e0096
fix(editor): image positioning in crop editor ( #10726 )
2026-02-01 09:21:30 +01:00
David Luzar
f7b537a8b1
feat(packages/excalidraw): export CommandPalette ( #10724 )
...
feat: export CommandPalette
2026-01-31 20:24:20 +01:00
David Luzar
802cde3501
feat: support customizing TTD welcome screen ( #10719 )
...
* feat: support customizing TTD welcome screen
* remove debug
2026-01-30 16:28:36 +01:00
David Luzar and Ashutosh Kumar
f5cf81ce42
feat: prevent pasting excalidraw into textarea & paste element text if avail ( #10710 )
...
* feat: prevent pasting excalidraw json into textarea & paste element text if avail
Co-authored-by: Ashutosh Kumar <130897584+codeaashu@users.noreply.github.com >
* fix FF
---------
Co-authored-by: Ashutosh Kumar <130897584+codeaashu@users.noreply.github.com >
2026-01-28 22:35:39 +01:00
David Luzar
6135548534
fix: rerender TTD preview on message remove ( #10681 )
2026-01-21 14:07:48 +01:00
David Luzar
acf54c6f38
fix: dropdownMenu item badge position ( #10682 )
2026-01-21 14:07:36 +01:00
David Luzar
84a309d669
fix: ttd 429 error handling ( #10680 )
2026-01-21 14:07:23 +01:00
David Luzar
3c8e893cab
fix: keep input focus during generation ( #10679 )
2026-01-20 20:14:28 +01:00
David Luzar
60ab14c2f6
fix: fail gracefully during restore ( #10673 )
...
* fix: fail gracefully during restore
* tests
2026-01-20 12:33:22 +01:00
David Luzar
1f47d61e8c
chore: bump node in tests.yml ( #10670 )
2026-01-19 09:23:50 +01:00
David Luzar
9d760336d1
feat: reduce max tablet MQ size ( #10669 )
...
* feat: reduce max tablet MQ size
* replace UIOptions.formFactor with getFormFactor
2026-01-18 21:55:14 +01:00
David Luzar
0443511954
fix: tweak error display in ttd ( #10668 )
...
fix: better error handling for ttd
2026-01-17 18:17:04 +01:00
David Luzar
5a73b9a363
refactor: change TTD persistence to iDB ( #10662 )
...
refactor: change ttd persistence to iDB
2026-01-16 15:10:00 +01:00
David Luzar
24a6941861
fix: retries and related UX fixes ( #10657 )
...
* fix: retries and related UX fixes
* bump
* fix package version
* yarn.lock
* naming and clearer type
* ignore test flake
2026-01-16 09:52:18 +01:00
David Luzar
b9a255407f
refactor: update SCSS syntax & remove open-color dep ( #10633 )
2026-01-10 18:15:14 +01:00
David Luzar
cc6c29c0b9
fix: update wysiwyg color on theme change ( #10618 )
2026-01-07 12:55:33 +01:00