Commit Graph

257 Commits (afb1d6725f93982ce856f563794554267388f745)

Author SHA1 Message Date
Gasim Gasimzada 76467073f2 Use `innerText` instead of `innerHTML` when measuring text (#312) 5 years ago
Gasim Gasimzada f465121f9b Feature: Action System (#298)
* Add Action System

- Add keyboard test
- Add context menu label
- Add PanelComponent

* Show context menu items based on actions

* Add render action feature

- Replace bringForward etc buttons with action manager render functions

* Move all property changes and canvas into actions

* Remove unnecessary functions and add forgotten force update when elements array change

* Extract export operations into actions

* Add elements and app state as arguments to `keyTest` function

* Add key priorities

- Sort actions by key priority when handling key presses

* Extract copy/paste styles

* Add Context Menu Item order

- Sort context menu items based on menu item order parameter

* Remove unnecessary functions from App component
5 years ago
Timur Khazamov c253c0b635 Command clicking should "xor" selection (#300)
* Command clicking should "xor" selection

* Only shift key should play a role

* Get rid of `isDraggingElements`

* Renamed someElementIsDragged to draggingOccured
5 years ago
Gunay Mert Karadogan 3eb6d1de68 Fix history saving for resizing/dragging element (#292) 5 years ago
dwelle 81f23a8ccb fix text shape contenteditable & paste handling (fixes #293) 5 years ago
Gasim Gasimzada f2346275ef
Extract Side Panel from App component (#295)
* Extract Side Panel from App component

* Refactor SidePanel component

- Remove unnecessary props (we are already passing appState as a prop)
- Remove unnecessary allback (we are already passing setState)
5 years ago
Gasim Gasimzada 35b5f6dd0d Fix a bug where clipboard object doesn't exist in Safari (#296) 5 years ago
David Luzar 2fb3cdd5e4
fix copy/paste regression (#291) 5 years ago
David Luzar deee57314d
support export canvas to clipboard (#232) 5 years ago
Giovanni Giordano 1541428ab1 Clear active tool on escape (#286)
* Clear active tool on escape

* Remove console log
5 years ago
Gasim Gasimzada 862231da4f Make all operations on elements array immutable (#283)
* Make scene functions return array instead of mutate array

- Not all functions were changes; so the given argument was a new array to some

* Make data restoration functions immutable

- Make mutations in App component

* Make history actions immutable

* Fix an issue in change property that was causing elements to be removed

* mark elements params as readonly & remove unnecessary copying

* Make `clearSelection` return a new array

* Perform Id comparisons instead of reference comparisons in onDoubleClick

* Allow deselecting items with SHIFT key

- Refactor hit detection code

* Fix a bug in element selection and revert drag functionality

Co-authored-by: David Luzar <luzar.david@gmail.com>
5 years ago
Faustino Kialungila 1ea72e9134
Center element on paste (#248)
* Center element on paste

* paste on cursor position

* correctly center elements

* rename vars
5 years ago
Guillermo Peralta Scura 4a044d3ace Show move and resize cursors on hover (#280)
* Change to move cursor on hover

* Show resize handlers on hover
5 years ago
davidbonan a16cd3a34f Add font size and font familly option for selection (#278)
* Add font size and font familly option for selection

* Allow copy font style

* More clearner method name

* Update options size and font-familly
5 years ago
Gasim Gasimzada 299e7e9099
Extract app and keys (#276)
* Extract app component from entrypoint (index)

- Use refs to refer to canvas and rough context
- Remove ReactDOM double rendering

* Extract keys and key related utils into their own module

* Move everything back to entrypoint
5 years ago
Gasim Gasimzada 36ce6a26e6 Make panels collapsible (#239)
* Make panels collapsible

- Add Panel component with collapse logic
- Use the component in all the necessary panel groups

* Remove unnecessary container from PanelCanvas

* Add "hide property" to Pane component to hide Panel contents using a prop

- Instead of doing conditional rendering, pass the condition to Panel as props

* Change collapse icon rotation for closed

- Use one icon and use CSS transforms to rotate it

* Remove unnecessary imports from PanelSelection
5 years ago
Timur Khazamov e38f65dea7
Contenteditable wysiwyg (#274)
* Contenteditable wysiwyg

* Added comment about pasting multiline text
5 years ago
Timur Khazamov 1739540f00
Creating a text near the center of a shape should put it in the center (#270)
* Snap to element center

* Fixed typo

* Added comment

* Reduced threshold to 30

* Skip snapping if alt key is pressed

* Fixed creating text with shape tool
5 years ago
David Luzar 068dca604f
prevent commit on eslint warnings & fix lint (#268) 5 years ago
Timur Khazamov 37934c0f8b
Fixes text jumping on creation (#266)
* Fixes text jumping on creation

* Do not remove node on ESC

* Fixed typo
5 years ago
David Luzar 2122a9cf9f
fix for duplicating elements (#261) 5 years ago
David Luzar 58ec6567ae ensure alt+drag duplicates all selected elems (#258) 5 years ago
dwelle 08b804ac63 ensure only selected elems can be resized (fixes #256) 5 years ago
dwelle 009412a093 improve typing for handlerRectangles 5 years ago
Jeremy Scatigna e7bf034fef duplicate element by alt dragging (#255) 5 years ago
Gasim Gasimzada 4b7eb2f04a
Add IDs to elements (#236)
* Add IDs to elements

- Move round rect function within the renderer

* Generate IDs using nanoid

* If element ID does not exist, add the ID during restoration
5 years ago
Timur Khazamov 2f9aa0e3ca Async loading of TwitterPicker (#246) 5 years ago
Timur Khazamov 2d66616e3f Fixed: Copy + Paste moves text inside rectangle #229 (#245) 5 years ago
Faustino Kialungila 846f427732 adding comments about diamond dimensions (#241) 5 years ago
Timur Khazamov 10955f8bb0 Wysiwyg text 2.0 (#238)
* Fixed cleaning handlers after cleanup

* Double click to edit text

* Preserve text styles on change
5 years ago
Timur Khazamov ae982e9298 Revert "Save scene in URL (#220)" (#234)
This reverts commit db973c61e8.
5 years ago
Gasim Gasimzada 829a65b8cb
Refactor Element Functions (#233)
* Remove `generatedraw` from element object

- Create a function that renders a single element
- Refactor rendering selected elements

* Replace getElementAbsoluteXY with getElementAbsoluteCoords
5 years ago
Gasim Gasimzada 85365e5bcb
Extract Sidebar panels into separate components (#230)
* Extract Sidebar panels into separate components

* Add Jest TS types
5 years ago
Faustino Kialungila 2fb5c4cd13 Add styles copy and pasting in the context menu (#227) 5 years ago
Christopher Chedeau f2665408fc
Revert "Wysiwyg text (#200)" (#225)
This reverts commit abbc04df0e.
5 years ago
Timur Khazamov db973c61e8 Save scene in URL (#220)
Co-authored-by: Christopher Chedeau <vjeuxx@gmail.com>
5 years ago
Timur Khazamov abbc04df0e Wysiwyg text (#200) 5 years ago
Anirban Sengupta b2eb2807cc Use Ctrl instead of Cmd for keyboard shortcuts on Windows (#216)
Co-authored-by: Christopher Chedeau <vjeuxx@gmail.com>
5 years ago
Timur Khazamov 257f697a98 Context menu with some commands (#217) 5 years ago
Faustino Kialungila 9305a33dba
Copy and paste styles (#219)
* copy and paste styles

* save copied styles in memory
5 years ago
David Luzar 1443cf1cd5
implement shift+resize for all sides (#210) 5 years ago
Abhishek Kulshrestha b12ea7de3e paste inside the viewport (#214) 5 years ago
Faustino Kialungila 5ade8987e4
Fixes pasting colors in color picker (#215)
* improve lozenge dimensions

* fix pasting colors in color picker input
5 years ago
Timur Khazamov 7bf0184499
Fixed ellipse hit test if sizes are negative (#205) 5 years ago
Gasim Gasimzada d0365933a9
Extract history (#213)
* Extract History into its own module

* Encapsulate undo and redo actions within history

* Encapsulate clearing redo stack within History

* Add private access modifiers to scene history class member variables

* Remove duplicate files
5 years ago
Gasim Gasimzada 054669cfef
Extract components and shapes into their respective modules (#212) 5 years ago
Gasim Gasimzada 86a1c29eec
Extract scene functions to their respective modules (#208)
- Also, extract utilities into utils module -- capitalizeString, getDateTime, isInputLike
5 years ago
Gasim Gasimzada 01805f734d
Extract element functions into modules (#207) 5 years ago
Gasim Gasimzada e3eef04e00 Move math and random files into their respective modules (#198)
* Move math and random files into their respective modules

- Move distanceBetweenPointAndSegment to math module
- Move LCG, randomSeed, and withCustomMathRandom to random module

* Add everything else back
5 years ago
Faustino Kialungila b3667000e2
improve lozenge dimensions (#197) 5 years ago
Guillermo Peralta Scura ea534dd535 Implement redo (#191) 5 years ago
Christopher Chedeau 3bbcb9cbdc
Improve Color Picker *2 (#195) 5 years ago
Christopher Chedeau 23cd62d148
Improve selection view (#192) 5 years ago
Paulo Menezes d5c6dd49a2 Styles fix (#190)
* Styles improvements

* Default values when restore elements
5 years ago
Paulo Menezes feefb14bf5 Double click to add text (#184)
* Double click to add text

* Remove duplicate code

* Add text improvements

* Cast element to text element
5 years ago
Paulo Menezes f360c3cb33 Change styles (#179)
* Fill style

* Roughness, opacity and more styles

* Remove duplicated options

* Support diamonds

* Remove unused import

* Fix typo and remove react import
5 years ago
Faustino Kialungila 4be88c9c58 Adding diamond shape (#159)
* Adding diamond shape

* hittest diamond shape

* fix x,y arguments

* renaming
5 years ago
Christopher Chedeau fd6b5024c7
Reorganize menu (#178) 5 years ago
IA 5f806474e3 Allow user to set file name (#145)
* Allow user to set file name

* Add EditableText component

Added editable text component and use component for project name edit.

* rebased branch

* Updated EditableText component

* Set default project name

* Move project name field away from the top section.
5 years ago
Timur Khazamov 7201198f23
Better scrollbars (#177)
* Better scrollbars

* Get rid of all unused options
5 years ago
Jared Palmer b5c67260d7 Improved color picker (#174)
* Add react-color

* Prettier

* Better styles

* Use enum for color pickers instead of strings

* Run prettier on .scss file
5 years ago
Timur Khazamov e7e676e1eb
Merge pull request #171 from nanot1m/arrows-start-end-points
Adjust arrow start/end points
5 years ago
Giovanni Giordano be41bd0f1c
Merge pull request #168 from nanot1m/fix-square-selection
Square selection should work in all directions
5 years ago
hazam d4693e0b37 Adjust arrow start/end points 5 years ago
Jared Palmer 15251e6c61 Add titles to shape buttons with key shortcuts 5 years ago
hazam 8c1af23d59 Square selection should work in all directions 5 years ago
Timur Khazamov 910b30a08a Dragging scrollbars (#161) 5 years ago
Giovanni Giordano d61ecca184
Merge pull request #156 from gipsy-king/textmeasure-actualboundingbox
fallback if TextMeasure.actualBoundingBox* unavailable
5 years ago
Benjamin Große 2feedbdbb7 fallback if TextMeasure.actualBoundingBox* unavailable 5 years ago
Giovanni Giordano 02daf6ffbd Recover index.tsx 5 years ago
Giovanni Giordano c4f4f18b81 Remove deploy files 5 years ago
Lucas Azzola 7c321b49ab Add save/load functionality from file (#146)
Fixes #143
5 years ago
Lucas Azzola 30ccaf0152 Set the cursor to 'crosshair' when expected to draw (#142)
* Set the cursor to 'crosshair' when expected to draw

And reset it back to default on mouse up.

Fixes #102

* Also reset cursor on text selection

* Use 'text' cursor for text
5 years ago
Christopher Chedeau 85fe9f85fb
Fix missing mouseup (#144) 5 years ago
Christopher Chedeau 9e5c5daf64
Cmd-Z (#141) 5 years ago
Christopher Chedeau 4ca8f65887
Use device pixel ratio (#139)
* Use device pixel ratio

* Update index.tsx
5 years ago
Brady Madden 4ad49ff970
Merge pull request #137 from bradymadden97/master
[bugfix] fix drag out of window for move/resize shape
5 years ago
Brady Madden ec28c83626 fix other drag issues 5 years ago
Paulo Menezes dfb7faec30 Resize with negative width or height (#136)
* Disable resize for text, arrow and multiple selection

* Resize with negative width and height

* Fix resizing when leaves windows
5 years ago
Christopher Chedeau 3172109050
Inline font-awesome icons (#134) 5 years ago
David Luzar 490438960d fix export to support scrolling (#133) 5 years ago
Timur Khazamov aa01be2dbe Fixed Unable to preventDefault errors in Chrome (#130)
* Fixed Unable to preventDefault errors in Chrome

* Cleanup wheel event listener
5 years ago
Timur Khazamov 34b8883739 Added outlines to focused buttons (#129) 5 years ago
Brady Madden 1919f30878 fix offset top and length causing drag issues (#122) 5 years ago
Paulo Menezes dee8a73d3d Resize (#103)
* Resize

* Detect collision with squares

* Disable resize for text, arrow and multiple selection

* Hide middle handlers when small
5 years ago
Christopher Chedeau bd86f819df
Prevent re-assignment of elements (#121) 5 years ago
Christopher Chedeau 25aabdc4d1
Fix hit testing (#119) 5 years ago
dwelle a1bcfb401c move css to scss 5 years ago
dwelle 250fbe2e1e make container fullscreen 5 years ago
dwelle c5d65ccb39 ensure we defocus input on canvas click
- also reuse the same detection logic for cancelling keyboard events
5 years ago
Faustino Kialungila 922ad6edcb Improve Buttons UX 5 years ago
David Luzar e0deb68875 ensure mouse drag doesn't select texts (#32) (#111) 5 years ago
David Luzar c623312380 add support for clearing canvas (#108) 5 years ago
hazam 4a03fa8542 Fix: right clicking while on the canvas messes up selection 5 years ago
Christopher Chedeau 4886065443
Wire up forward (#101)
* Wire up forward

* Match words with Keynote/Powerpoint
5 years ago
Christopher Chedeau 6b8d2970ac
Add support for forward (#100) 5 years ago
Paulo Menezes e9484080e7 UI move buttons (#99) 5 years ago
Christopher Chedeau 0d5272720f
Send to back (#98) 5 years ago
Paulo Menezes b1a90c0020 Side panel (#95)
* Side panel

* Update arrow icon
5 years ago
Christopher Chedeau 66938ae5c6
Update on resize (#94)
Fixes #88
5 years ago
Christopher Chedeau 8605af2b54
Fix key warning (#93) 5 years ago
Christopher Chedeau c077403eec Generate new seed on paste 5 years ago
Christopher Chedeau 929efa5e2c
Distance between point and ellipsis (#92) 5 years ago
Sergey Rubanov 51bea5eff3 - Use Math.hypot (#87)
- Fix context parameter name in isTextElement function
- Remove unused code
- Use block scope everywhere
5 years ago
Alex Bratsos 58d81280c9 Add shortcuts (#85)
* Add yarn.lock to .gitignore

* Extract available shapes to one place

* Add event listeners for shapes shortcuts

* fixup! Add event listeners for shapes shortcuts

* Underline first letter of shapes

to indicate interactivity

* fixup! Extract available shapes to one place

* fixup! Add event listeners for shapes shortcuts
5 years ago
hazam 9d65b1cbc1 Code cleanup 5 years ago
hazam 1b93888da5 Restore fill style 5 years ago
hazam 2a0eacbeca Fixed selection and added scrollbars 5 years ago
hazam 51e19b977e Scroll with mouse wheel 5 years ago
Giovanni Giordano 02bf6f0f14 Add preload to font 5 years ago
Christopher Chedeau b18a0efe2c
Seed (#73) 5 years ago
Faustino Kialungila 4fa55222fd Rename excalibur to excalidraw 5 years ago
Paulo Menezes 98b158a83d Save to local storage (#53)
* Save to local storage

* Restore on page load

* Warning when leave without save
5 years ago
Faustino Kialungila f2386eb131 Add Text Colors (#67)
* Add ability to choose a color when creating text elements

* use strokeColor instead of adding a new field
5 years ago
Kevin Viglucci 527209e740 Add support for 'delete' key (#56)
* add package-lock.json to gitignore as project appears to use yarn

* add support for deleting elements with "delete" key + assign magic numbers and keycode values to named properties
5 years ago
Giovanni Giordano c2c13f0f27
Merge pull request #64 from excalidraw/fix-body-margin
Fixes body margin
5 years ago
Faustino Kialungila c224bc4c8f Fix global items colors 5 years ago
Giovanni Giordano 26c7f362b6 Fixes body margin 5 years ago
David Luzar db386b8400 fix regression of always exporting bg (#62) 5 years ago
Christopher Chedeau a5b0e192b4
Remove drawScene (#58) 5 years ago
Christopher Chedeau 4c94976527
Random fixes (#57) 5 years ago
Faustino Kialungila 10e317e359 Colors 5 years ago
Christopher Chedeau 3b919f3235
Cmd-A to select everything (#51) 5 years ago
Christopher Chedeau 278fc11d22
Better selection click detection (#50) 5 years ago
Christopher Chedeau 8a43ed691d
Handle escape keybinding (#49) 5 years ago
Christopher Chedeau 0d75b78374
Path-dependent hit test (#48)
* Hit test

* Hit test

* Hit test
5 years ago
David Luzar 4c1bf07863 ensure click-to-select is exclusive (fixes #43) (#45) 5 years ago
Christopher Chedeau b6c30c0550
Copy paste (#44)
* Copy Paste

* Copy paste
5 years ago
dwelle 579c32b5b2 remove optional chaning
until CodeSandbox adds support for it in CRA apps
5 years ago
Timur Khazamov 1383758aa7 TS, Prettier, Eslint (#39)
* TS, Prettier, Eslint

* Used rough ts definitions
5 years ago
dwelle 4eda1cfb5d prevent exporting empty canvas 5 years ago
dwelle f091e9813e fix exporting bg for non-cropped exports
- also refactor and add comments to `exportAsPNG`
5 years ago
Giovanni Giordano 4a4f36592f Fixes selecting an element 5 years ago
Giovanni Giordano 61bdedaecf Clear selection if no element is clicked 5 years ago
Giovanni Giordano 874934e585
Merge branch 'master' into select-on-click 5 years ago
Giovanni Giordano 715efc054e Remove extra check for dragging 5 years ago
Giovanni Giordano a9bd112f47 Select element on click 5 years ago
David Luzar 68eeaa3c7d add PNG export (#31) 5 years ago
Timur Khazamov bb151d83bc Drag to move selection (#28) 5 years ago
Christopher Chedeau 44ff545219 Fix text height 5 years ago
Christopher Chedeau afe6331c61 Reset selection when adding text 5 years ago
Christopher Chedeau ee7dc953bf Fix clearRect for [0, 0.5] 5 years ago
Christopher Chedeau 457800caa3 Mouse move tracked outside window! 5 years ago
Christopher Chedeau 9aaaa24426 Also for text 5 years ago
Christopher Chedeau 2fa00f39fc Automatically select last inserted element 5 years ago
Christopher Chedeau c26d04e162 Don't write null when cancelling text 5 years ago
Christopher Chedeau ab84b5a048 Go to selection mode after adding a shape 5 years ago
Christopher Chedeau f8873dd56b Do not regenerate shapes when moving 5 years ago
Christopher Chedeau bd515f7e50 Real 1px lines 5 years ago
Christopher Chedeau 4076cf003f Proper fix for negative width 5 years ago