Files
excalidraw/packages
afed9e6e27 fix(editor): handle the save-as shortcut while editing text (#11922)
* fix(editor): handle the save-as shortcut while editing text

Cmd/Ctrl+Shift+S did nothing while a text editor was open — the editor stayed
open and no save happened. Plain Cmd/Ctrl+S worked.

The wysiwyg keydown handler only branches on `actionSaveToActiveFile`, whose
keyTest requires `!event.shiftKey`, so the shift variant matched nothing and was
swallowed. This adds the sibling branch for `actionSaveFileToDisk`, mirroring
what the plain shortcut already does: commit the text, then run the action.

Complements #9281, which fixed the plain shortcut in the same handler.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* test(editor): assert the save-as shortcut actually dispatches the save

Review feedback: the regression test only asserted that editing ended, which
`handleSubmit()` satisfies on its own — the test still passed with the
`executeAction(actionSaveFileToDisk)` call deleted, so half the fix was unpinned.

Now spies on `saveAsJSON`, which is what the action ultimately reaches, and
captures `editingTextElement` at the moment it runs so the ordering (commit,
then save) is pinned too. Verified: removing the dispatch now fails with
`expected "saveAsJSON" to be called 1 times, but got 0 times`.

Also adds a negative case — closing the editor with Escape must not save — so
the spy proves the save is tied to the shortcut rather than to teardown.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* fix(editor): dispatch text-editor save shortcuts as keyboard actions, trim tests

- pass the "keyboard" source for both save shortcuts in the wysiwyg keydown
  (was the default "api", which skipped the interaction gate and mistracked)
- drop the explanatory comment on the save-as branch
- fold the three save tests into one it.each in the existing container-unbound
  suite, covering both Cmd/Ctrl+S and Cmd/Ctrl+Shift+S and pinning that the
  text is committed before saveAsJSON runs

Claude Opus 5.5 (1M context), xhigh

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Co-authored-by: dwelle <5153846+dwelle@users.noreply.github.com>
2026-09-26 22:38:03 +00:00
..