* save penMode and penDetected to browser cache
* added on pointer down
* added onPointerDown
* factor out and merge handlers
Co-authored-by: dwelle <luzar.david@gmail.com>
* feat: Add Eraser 🎉
* Eraser working
* remove unused state
* fix
* toggle eraser
* Support deselect with Alt/Option
* rename actionDelete -> actionErase
* Add util isEraserActive
* show eraser in mobile
* render eraser conditionally in mobile
* use selection if eraser in local storage state
* Add sampling to erase accurately
* use pointerDownState
* set eraser to false in AllowedExcalidrawElementTypes
* rename/reword fixes
* don't use updateScene
* handle bound text when erasing
* fix hover state in mobile
* consider all hitElements instead of a single
* code improvements
* revert to select if eraser active and elements selected
* show eraser in zenmode
* erase element when clicked on element while eraser active
* set groupIds to empty when eraser active
* fix test
* remove dragged distance
* feat: Support hypelinks
* dont show edit when link not present
* auto submit on blur
* Add link button in sidebar and do it react way
* add key to hyperlink to remount when element selection changes
* autofocus input
* remove click handler and use pointerup/down to show /hide popup
* add keydown and support enter/escape to submit
* show extrrnal link icon when element has link
* use icons and open link in new tab
* dnt submit unless link updated
* renamed ffiles
* remove unnecessary changes
* update snap
* hide link popup once user starts interacting with element and show again only if clicked outside and clicked on element again
* render link icon outside the element
* fix hit testing
* rewrite implementation to render hyperlinks outside elements and hide when element selected
* remove
* remove
* tweak icon position and size
* rotate link icon when element rotated, handle zooming and render exactly where ne resize handle is rendered
* no need to create a new reference anymore for element when link added/updated
* rotate the link image as well when rotating element
* calculate hitbox of link icon and show pointer when hovering over link icon
* open link when clicked on link icon
* show tooltip when hovering over link icon
* show link action only when single element selected
* support other protocols
* add shortcut cmd/ctrl+k to edit/update link
* don't hide popup after submit
* renderes decreased woo
* Add context mneu label to add/edit link
* fix tests
* remove tick and show trash when in edit mode
* show edit view when element contains link
* fix snap
* horizontally center the hyperlink container with respect to elemnt
* fix padding
* remove checkcircle
* show popup on hover of selected element and dismiss when outside hitbox
* check if element has link before setting popup state
* move logic of auto hide to hyperlink and dnt hide when editing
* hide popover when drag/resize/rotate
* unmount during autohide
* autohide after 500ms
* fix regression
* prevent cmd/ctrl+k when inside link editor
* submit when input not updated
* allow custom urls
* fix centering of popup when zoomed
* fix hitbox during zoom
* fix
* tweak link normalization
* touch hyperlink tooltip DOM only if needed
* consider 0 if no offsetY
* reduce hitbox of link icon and make sure link icon doesn't show on top of higher z-index elements
* show link tooltip only if element has higher z-index
* dnt show hyperlink popup when selection changes from element with link to element with no link and also hide popover when element type changes from selection to something else
* lint: EOL
* fix link icon tooltip positioning
* open the link only when last pointer down and last pointer up hit the link hitbox
* render tooltip after 300ms delay
* ensure link popup and editor input have same height
* wip: cache the link icon canvas
* fix the image quality after caching using device pixel ratio yay
* some cleanup
* remove unused selectedElementIds from renderConfig
* Update src/renderer/renderElement.ts
* fix `opener` vulnerability
* tweak styling
* decrease padding
* open local links in the same tab
* fix caching
* code style refactor
* remove unnecessary save & restore
* show link shortcut in help dialog
* submit on cmd/ctrl+k
* merge state props
* Add title for link
* update editview if prop changes
* tweak link action logic
* make `Hyperlink` compo editor state fully controlled
* dont show popup when context menu open
* show in contextMenu only for single selection & change pos
* set button `selected` state
* set contextMenuOpen on pointerdown
* set contextMenyOpen to false when action triggered
* don't render link icons on export
* fix tests
* fix buttons wrap
* move focus states to input top-level rule
* fix elements sharing `Hyperlink` state
* fix hitbox for link icon in case of rect
* Early return if hitting link icon
Co-authored-by: dwelle <luzar.david@gmail.com>
* Use Theme type everywhere
* Rename Appearance type to Theme for consistency
* Reorder headers in readme
The host don't need to pass hardcoded strings any more and instead can use the exported constant
* Remove width/height from the ".excalidraw" container so it will sized automatically.
* updated all ref calculation to ".excalidraw" instead of parent since now ".excalidraw" will get resized
* Remove props width/height as its not needed anymore.
* Resize handler is also not needed anymore.
* Position absolute canvas due to #3379 (comment)
* move css to style and remove one extra rerendering
* factor out mock logic for test
* set height, width so as to avoid unnecessary updates of regression snap
* better mock
* better type checking and omit width,height from getDefaultAppState and also restore
* revert
* default to window dimensions in constructor
* update docs
* update
* update
* tweaks
* Refactor: simplify linear element type
* Refactor: dedupe scrollbar handling
* First step towards binding - establish relationship and basic test for dragged lines
* Refactor: use zoom from appstate
* Refactor: generalize getElementAtPosition
* Only consider bindable elements in hit test
* Refactor: pull out pieces of hit test for reuse later
* Refactor: pull out diamond from hit test for reuse later
* Refactor: pull out text from hit test for reuse later
* Suggest binding when hovering
* Give shapes in regression test real size
* Give shapes in undo/redo test real size
* Keep bound element highlighted
* Show binding suggestion for multi-point elements
* Move binding to its on module with functions so that I can use it from actions, add support for binding end of multi-point elements
* Use Id instead of ID
* Improve boundary offset for non-squarish elements
* Fix localStorage for binding on linear elements
* Simplify dragging code and fix elements bound twice to the same shape
* Fix binding for rectangles
* Bind both ends at the end of the linear element creation, needed for focus points
* wip
* Refactor: Renames and reshapes for next commit
* Calculate and store focus points and gaps, but dont use them yet
* Focus points for rectangles
* Dont blow up when canceling linear element
* Stop suggesting binding when a non-compatible tool is selected
* Clean up collision code
* Using Geometric Algebra for hit tests
* Correct binding for all shapes
* Constant gap around polygon corners
* Fix rotation handling
* Generalize update and fix hit test for rotated elements
* Handle rotation realtime
* Handle scaling
* Remove vibration when moving bound and binding element together
* Handle simultenous scaling
* Allow binding and unbinding when editing linear elements
* Dont delete binding when the end point wasnt touched
* Bind on enter/escape when editing
* Support multiple suggested bindable elements in preparation for supporting linear elements dragging
* Update binding when moving linear elements
* Update binding when resizing linear elements
* Dont re-render UI on binding hints
* Update both ends when one is moved
* Use distance instead of focus point for binding
* Complicated approach for posterity, ignore this commit
* Revert the complicated approach
* Better focus point strategy, working for all shapes
* Update snapshots
* Dont break binding gap when mirroring shape
* Dont break binding gap when grid mode pushes it inside
* Dont bind draw elements
* Support alt duplication
* Fix alt duplication to
* Support cmd+D duplication
* All copy mechanisms are supported
* Allow binding shapes to arrows, having arrows created first
* Prevent arrows from disappearing for ellipses
* Better binding suggestion highlight for shapes
* Dont suggest second binding for simple elements when editing or moving them
* Dont steal already bound linear elements when moving shapes
* Fix highlighting diamonds and more precisely highlight other shapes
* Highlight linear element edges for binding
* Highlight text binding too
* Handle deletion
* Dont suggest second binding for simple linear elements when creating them
* Dont highlight bound element during creation
* Fix binding for rotated linear elements
* Fix collision check for ellipses
* Dont show suggested bindings for selected pairs
* Bind multi-point linear elements when the tool is switched - important for mobile
* Handle unbinding one of two bound edges correctly
* Rename boundElement in state to startBoundElement
* Dont double account for zoom when rendering binding highlight
* Fix rendering of edited linear element point handles
* Suggest binding when adding new point to a linear element
* Bind when adding a new point to a linear element and dont unbind when moving middle elements
* Handle deleting points
* Add cmd modifier key to disable binding
* Use state for enabling binding, fix not binding for linear elements during creation
* Drop support for binding lines, only arrows are bindable
* Reset binding mode on blur
* Fix not binding lines
* feat: calculate coords based on parent left and top so it renders correctly in host App
* fix text
* move offsets to state & fix bugs
* fix text jumping
* account for zoom in textWysiwyg & undo incorrect offsetting
Co-authored-by: dwelle <luzar.david@gmail.com>
* 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>
* rewrite wysiwyg property updating
* reuse existing class
* fix case of focus being stolen by other UIs
* revert mistake csp removal
* ensure we don't run cleanup twice
* fix opacity updating
* add shape actions menu class to constants