* feat: support arrow with text
* render arrow -> clear rect-> render text
* move bound text when linear elements move
* fix centering cursor when linear element rotated
* fix y coord when new line added and container has 3 points
* update text position when 2nd point moved
* support adding label on top of 2nd point when 3 points are present
* change linear element editor shortcut to cmd+enter and fix tests
* scale bound text points when resizing via bounding box
* ohh yeah rotation works :)
* fix coords when updating text properties
* calculate new position after rotation always from original position
* rotate the bound text by same angle as parent
* don't rotate text and make sure dimensions and coords are always calculated from original point
* hardcoding the text width for now
* Move the linear element when bound text hit
* Rotation working yaay
* consider text element angle when editing
* refactor
* update x2 coords if needed when text updated
* simplify
* consider bound text to be part of bounding box when hit
* show bounding box correctly when multiple element selected
* fix typo
* support rotating multiple elements
* support multiple element resizing
* shift bound text to mid point when odd points
* Always render linear element handles inside editor after element rendered so point is visible for bound text
* Delete bound text when point attached to it deleted
* move bound to mid segement mid point when points are even
* shift bound text when points nearby deleted and handle segment deletion
* Resize working :)
* more resize fixes
* don't update cache-its breaking delete points, look for better soln
* update mid point cache for bound elements when updated
* introduce wrapping when resizing
* wrap when resize for 2 pointer linear elements
* support adding text for linear elements with more than 3 points
* export to svg working :)
* clip from nearest enclosing element with non transparent color if present when exporting and fill with correct color in canvas
* fix snap
* use visible elements
* Make export to svg work with Mask :)
* remove id
* mask canvas linear element area where label is added
* decide the position of bound text during render
* fix coords when editing
* fix multiple resize
* update cache when bound text version changes
* fix masking when rotated
* render text in correct position in preview
* remove unnecessary code
* fix masking when rotating linear element
* fix masking with zoom
* fix mask in preview for export
* fix offsets in export view
* fix coords on svg export
* fix mask when element rotated in svg
* enable double-click to enter text
* fix hint
* Position cursor correctly and text dimensiosn when height of element is negative
* don't allow 2 pointer linear element with bound text width to go beyond min width
* code cleanup
* fix freedraw
* Add padding
* don't show vertical align action for linear element containers
* Add specs for getBoundTextElementPosition
* more specs
* move some utils to linearElementEditor.ts
* remove only :p
* check absoulte coods in test
* Add test to hide vertical align for linear eleemnt with bound text
* improve export preview
* support labels only for arrows
* spec
* fix large texts
* fix tests
* fix zooming
* enter line editor with cmd+double click
* Allow points to move beyond min width/height for 2 pointer arrow with bound text
* fix hint for line editing
* attempt to fix arrow getting deselected
* fix hint and shortcut
* Add padding of 5px when creating bound text and add spec
* Wrap bound text when arrow binding containers moved
* Add spec
* remove
* set boundTextElementVersion to null if not present
* dont use cache when version mismatch
* Add a padding of 5px vertically when creating text
* Add box sizing content box
* Set bound elements when text element created to fix the padding
* fix zooming in editor
* fix zoom in export
* remove globalCompositeOperation and use clearRect instead of fillRect
* fix: boundElementIds when arrows bound to elements are deleted
* fix type checks and updating unrelated elements
Co-authored-by: dwelle <luzar.david@gmail.com>
* fix: Use Array.from when spreading over set so that typescript transpiles correctly in the umd build
* patch version
* fix
* update changelog
* tweak
* 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