* Refactor: use pointer down state for alt duplication flag
* Refactor: use pointer down state for drag state
* Refactor: simplify over scrollbars check
* Refactor: move pointer move handler out of pointer down handler
* Refactor: move pointer up handler out of pointer down handler
* Refactor: further simplify scrollbar check state in pointer down event
* Refactor: pull out initial pointer down state creation
* Refactor: introduce pointer down state to replace implicit closure state with an explicit object
* Refactor: use pointer down state for resize handle
* Refactor: use pointer down state for isResizing
* Refactor: use pointer down state for resizing offset
* Refactor: use pointer down state for hit element
* Refactor: move selection handling out of pointer down event handler
* Refactor: move text handling out of pointer down event handler
* Refactor: move linear tools handling out of pointer down event handler
* Refactor: move element creation out of pointer down handler
* Refactor: Move context menu touch device handling
* Refactor: Move more stuff out of pointer down
* Refactor: Move last coords into an object
* Refactor: Move scrollbar handling out of pointer down
* Refactor: simplify resizing in pointer down
* Refactor: further simplify resizing in pointer down
* Refactor: clarify clearing selection code
* Refactor: move out clearing selection from pointer down
* Refactor: further simplify deselection in pointer down
* Initial support for touch context menu
* Only deal with touch if it's available
* Fix touch checking
* Remove touch checking
* Added comments
* Combine onTouch with onPointer for mobile context menu support
* Implement Save without re-prompt and Save as
Fixes#1668
* Add save-as icon
* Make .excalidraw the default extension
* Only show save as button on supporting browsers
* implement line editing
* line editing with rotation
* ensure adding new points is disabled on point dragging
* fix hotkey replacement
* don't paint bounding box when creating new multipoint
* tweak points style, account for zoom and z-index
* don't persist editingLinearElement to localStorage
* don't mutate on noop points updates
* account for rotation when adding new point
* ensure clicking on points doesn't deselect element
* tweak history handling around editingline element
* update snapshots
* refactor pointerMove handling
* factor out point dragging
* factor out pointerDown
* improve positioning with rotation
* revert to use roughjs for calculating points bounds
* migrate from storing editingLinearElement.element to id
* make GlobalScene.getElement into O(1)
* use Alt for adding new points
* fix adding and deleting a point with rotation
* disable resize handlers & bounding box on line edit
Co-authored-by: daishi <daishi@axlight.com>
* don't use unicode characters for shortcut help
* use option instead of alt
* make shortcut replacement case-insensitive
* improve shortcut dialog layout