Commit Graph

589 Commits (3700cf2d103d59575b0c5f6bf3ebef702b33c01e)

Author SHA1 Message Date
dwelle dcee594b66 remove forgotten debug statements 3 years ago
David Luzar 79d323fab1
refactor: simplify zoom by removing `zoom.translation` (#4477) 3 years ago
Aakansha Doshi 18c526d877
feat: support contextMenuLabel to be of function type to support dynmaic labels (#4654) 3 years ago
Aakansha Doshi 24bf4cb5fb
fix: support collaboration in bound text (#4573)
* fix: support collaboration in bounded text

* align implementation irrespective of collab/submit

* don't wrap when submitted

* fix

* tests: exit editor via ESCAPE instead to remove async hacks

* simplify and remove dead comment

* remove mutating coords in submit since its taken care in updateWysiwygStyle

Co-authored-by: dwelle <luzar.david@gmail.com>
3 years ago
David Luzar 1fd2fe56ee
fix: cmd/ctrl native browser behavior blocked in inputs (#4589)
* fix: cmd/ctrl native browser behavior blocked in inputs

* add basic test for fontSize increase/decrease via keyboard

* add tests for fontSize resizing via keyboard outside wysiwyg

* Update src/element/textWysiwyg.test.tsx

Co-authored-by: Aakansha Doshi <aakansha1216@gmail.com>

* Update src/tests/resize.test.tsx

Co-authored-by: Aakansha Doshi <aakansha1216@gmail.com>

* Update src/tests/resize.test.tsx

Co-authored-by: Aakansha Doshi <aakansha1216@gmail.com>

Co-authored-by: Aakansha Doshi <aakansha1216@gmail.com>
3 years ago
David Luzar a51ed9ced6
feat: support decreasing/increasing `fontSize` via keyboard (#4553)
Co-authored-by: david <dw@dw.local>
3 years ago
Aakansha Doshi 50bd5fbae1
fix: don't mutate the bounded text if not updated when submitted (#4543)
* fix: don't mutate the bounded text if not updated when submitted

* dont update text for bounded text unless submitted

* add specs

* use node 16

* fix

* Update text when editing and cache prev text

* update prev text when props updated

* remove only

* type properly and remove unnecessary type checks

* cache original text and compare with editor value to fix alignement issue after editing and add specs

* naming tweak

Co-authored-by: dwelle <luzar.david@gmail.com>
3 years ago
Arun 0a89c4b0c8
fix: prevent canvas drag while editing text (#4552) 3 years ago
David Luzar d5a6014076
fix: prefer spreadsheet data over image (#4533) 3 years ago
Aakansha Doshi b475412199
feat: support updating library in updateScene API (#4546)
* feat: support updating library in updateScene API

* fix

* update docs

* Update src/packages/excalidraw/CHANGELOG.md
3 years ago
David Luzar 28546fbb55
fix: bound text doesn't inherit container (#4521) 3 years ago
Aakansha Doshi 63ce5b82d7
fix: pending review fixes for sticky notes (#4493) 3 years ago
David Luzar bae0e985b2
fix: prevent browser from scrolling when panning (#4489) 3 years ago
Aakansha Doshi f463c047c0
fix: pasted elements except binded text once paste action is complete (#4472) 3 years ago
Aakansha Doshi d0733b1960
fix: move binded text when moving container using keyboard (#4466) 3 years ago
Aakansha Doshi 64c2d76cfa
fix: support dragging binded text in container selected in a group (#4462)
* fix: support moving binded text when container selected via group

* update coords of bounded text only when element doesn't belong to any group or element in group is selected

* dnt drag binded text when nested group selected

* Update src/element/dragElements.ts

Co-authored-by: David Luzar <luzar.david@gmail.com>

Co-authored-by: David Luzar <luzar.david@gmail.com>
3 years ago
zsviczian c76784b774
fix: Scope drag and drop events to Excalidraw container to prevent overriding the host drag and drop events (#4445)
* cross-env

* reverting lib

https://github.com/excalidraw/excalidraw/issues/4282

* Revert "reverting lib"

This reverts commit 840726806a.

* Update package.json

* Update App.tsx

* Update App.tsx

* lint

* updated changelog

* Update src/packages/excalidraw/CHANGELOG.md

Co-authored-by: Aakansha Doshi <aakansha1216@gmail.com>

* Update src/packages/excalidraw/CHANGELOG.md

* Move fixes above build header

* Update src/packages/excalidraw/CHANGELOG.md

* lint

Co-authored-by: Aakansha Doshi <aakansha1216@gmail.com>
Co-authored-by: David Luzar <luzar.david@gmail.com>
3 years ago
Aakansha Doshi 089b05db1b
fix: switch cursor to center of container when adding text when dimensions are too small (#4452) 3 years ago
Aakansha Doshi c2a8712593
fix: update viewport coords correctly when editing text (#4416) 3 years ago
Aakansha Doshi 98b5c37e45
feat: bind text to shapes when pressing enter and support sticky notes 🎉 (#4343)
* feat: Word wrap inside rect and increase height when size exceeded

* fixes for auto increase in height

* fix height

* respect newlines when wrapping text

* shift text area when height increases beyond mid rect height until it reaches to the top

* select bound text if present when rect selected

* mutate y coord after text submit

* Add padding of 30px and update dimensions acordingly

* Don't allow selecting bound text element directly

* support deletion of bound text element when rect deleted

* trim text

* Support autoshrink and improve algo

* calculate approx line height instead of hardcoding

* use textContainerId instead of storing textContainer element itself

* rename boundTextElement -> boundTextElementId

* fix text properties not getting reflected after edit inside rect

* Support resizing

* remove ts ignore

* increase height of container when text height increases while resizing

* use original text when editing/resizing so it adjusts based on original text

* fix tests

* add util isRectangleElement

* use isTextElement util everywhere

* disable selecting text inside rect when selectAll

* Bind text to circle and diamond as well

* fix tests

* vertically center align the text always

* better vertical align

* Disable binding arrows for text inside shapes

* set min width for text container when text is binded to container

* update dimensions of container if its less than min width/ min height

* Allow selecting of text container for transparent containers when clicked inside

* fix test

* preserve whitespaces between long word exceeding width and next word
Use word break instead of whitespace no wrap for better readability and support safari

* Perf improvements for measuring text width and resizing
* Use canvas measureText instead of our algo. This has reduced the perf ~ 10 times
* Rewrite wrapText algo to break in words appropriately and for longer words
calculate the char width in order unless max width reached. This makes the
the number of runs linear (max text length times) which was earlier
textLength * textLength-1/2 as I was slicing the chars from end until max width reached for each run
* Add a util to calculate getApproxCharsToFitInWidth to calculate min chars to fit in a line

* use console.info so eslint doesnt warn :p

* cache char width and don't call resize unless min width exceeded

* update line height and height correctly when text properties inside container updated

* improve vertical centering when text properties updated, not yet perfect though

* when double clicked inside a conatiner  take the cursor to end of text same as what happens when enter is pressed

* Add hint when container selected

* Select container when escape key is pressed after submitting text

* fix copy/paste when using copy/paste action

* fix copy when dragged with alt pressed

* fix export to svg/png

* fix add to library

* Fix copy as png/svg

* Don't allow selecting text when using selection tool and support resizing when multiple elements include ones with binded text selectec

* fix rotation jump

* moove all text utils to textElement.ts

* resize text element only after container resized so that width doesnt change when editing

* insert the remaining chars for long words once it goes beyond line

* fix typo, use string for character type

* renaming

* fix bugs in word wrap algo

* make grouping work

* set boundTextElementId only when text present else unset it

* rename textContainerId to containerId

* fix

* fix snap

* use originalText in redrawTextBoundingBox so height is calculated properly and center align works after props updated

* use boundElementIds and also support binding text in images 🎉

* fix the sw/se ends when resizing from ne/nw

* fix y coord when resizing from north

* bind when enter is pressed, double click/text tool willl edit the binded text if present else create a new text

* bind when clicked on center of container

* use pre-wrap instead of normal so it works in ff

* use container boundTextElement when container present and trying to edit text

* review fixes

* make getBoundTextElementId type safe and check for existence when using this function

* fix

* don't duplicate boundElementIds when text submitted

* only remove last trailing space if present which we have added when joining words

* set width correctly when resizing to fix alignment issues

* make duplication work using cmd/ctrl+d

* set X coord correctly during resize

* don't allow resize to negative dimensions when text is bounded to container

* fix, check last char is space

* remove logs

* make sure text editor doesn't go beyond viewport and set container dimensions in case it overflows

* add a util isTextBindableContainer to check if the container could bind text
3 years ago
David Luzar 104664cb9e
feat: support selecting multiple points when editing line (#4373) 3 years ago
David Luzar b53d1f6f3e
feat: improve library preview image generation on publish (#4321)
Co-authored-by: Aakansha Doshi <aakansha1216@gmail.com>
3 years ago
David Luzar 8ff159e76e
fix: export scale quality regression (#4316) 3 years ago
David Luzar 59e9651547
feat: log FS abortError to console (#4279) 3 years ago
David Luzar e60e48e67d
fix: account for libraries v2 when prompting (#4263) 3 years ago
Aakansha Doshi 84d1d9993c
feat: Allow publishing libraries from UI (#4115)
* feat: Allow publishing libraries from UI

* Add status for each library item and show publish only for unpublished libs

* Add publish library dialog

* Pass the data to publish the library

* pass lib blob

* Handle old and new libraries when importing

* Better error handling

* Show publish success when library submitted for review

* don't close library when publish success dialog open

* Support multiple libs deletion and publish

* Set status to published once library submitted for review

* Save  to LS after library published

* unique key for publish and delete

* fix layout shift when hover and also highlight selected library items

* design improvements

* migrate old library to the new one

* fix

* fix tests

* use i18n

* Support submit type in toolbutton

* Use html5 form validation, add asteriks for required fields, add twitter handle, mark github handle optional

* Add twitter handle in form state

* revert html5 validation as fetch is giving some issues :/

* clarify types around LibraryItems

* Add website optional field

* event.preventDefault to make htm5 form validationw work

* improve png generation by drawing a bounding box rect and aligining pngs to support multiple libs png

* remove ts-ignore

* add placeholders for fields

* decrease clickable area for checkbox by 0.5em

* add checkbox background color

* rename `items` to `elements`

* improve checkbox hit area

* show selected library items in publish dialog

* decrease dimensions by 3px to improve jerky experience when opening/closing library menu

* Don't close publish dialog when clicked outside

* Show selected library actions only when any library item selected and use icons instead of button

* rename library to libraryItems in excalidrawLib and added migration

* change icon and swap bg/color

* use blue brand color for hover/selected states

* prompt for confirmation when deleting library items

* separate unpublished items from published

* factor `LibraryMenu` into own file

* i18n and minor fixes for unpublished items

* fix not rendering empty cells when library empty

* don't render published section if empty and unpublished is not

* Add edit name functionality for library items

* fix

* edit lib name with onchange/blur

* bump library version

* prefer response error message

* add library urls to ENV vars

* mark lib item name as required

* Use input only for lib item name

* better error validation for lib items

* fix label styling for lib items

* design and i18n fixes

* Save publish dialog data to local storage and clear once published

* Add a note about MIT License

* Add note for guidelines

* Add tooltip for publish button

* Show spinner in submit button when submission is in progress

* assign id for older lib items when installed and set status as published for all lib when installed

* update export icon and support export library for selected items

* move LibraryMenuItems into its own component as its best to keep one comp per file

* fix spec

* Refactoring the library actions for reusablility

* show only load when items not present

* close on click outside in publish dialog

* ad dialog description and tweak copy

* vertically center input labels

* align input styles

* move author name input to other usernames

* rename param

* inline to simplify

* fix to not inline `undefined` class names

* fix version & include only latest lib schema in library export type

* await response callback

* refactor types

* refactor

* i18n

* align casing & tweaks

* move ls logic to publishLibrary

* support removal of item inside publish dialog

* fix labels for trash icon when items selected

* replace window.confirm for removal libs with confirm dialog

* fix input/textarea styling

* move library item menu scss to its own file

* use blue for load and cyan for publish

* reduce margin for submit and make submit => Submit

* Make library items header sticky

* move publish icon to left so there is no jerkiness when unpublish items selected

* update url

* fix grid gap between lib items

* Mark older items imported from initial data as unpublished

* add text to publish button on non-mobile

* add items counter

* fix test

* show personal and excal libs sections and personal goes first

* show toast on adding to library via contextMenu

* Animate plus icon and not the pending item

* fix snap

* use i18n when no item in publish dialog

* tweak style of new lib item

* show empty cells for both sections and set status as published for installed libs

* fix

* push selected item first in unpublished section

* set status as published for imported from webiste but unpublished for json

* Add items to the begining of library

* add `created` library item attr

* fix test

* use `defaultValue` instead of `value`

* fix dark theme styles

* fix toggle button not closing library

* close library menu on Escape

* tweak publish dialog item remove style

* fix remove icon in publish dialog

Co-authored-by: dwelle <luzar.david@gmail.com>
3 years ago
Lipis 8d4f455cd3
chore: Update Typescript to 4.4.4 (#4188) 3 years ago
Lipis 1c7056bdaa
chore: bump Prettier to the latest (#4185) 3 years ago
David Luzar 790e6da500
fix: images not initialized correctly (#4157)
* fix: image not initialized correctly due to not renewing `state.pendingImageElement`

* ensure we replace elements on update

* set file as errored on >= 400 status respones
3 years ago
David Luzar c61f95a327
fix: image-related fixes (#4147)
* flush queues on portal close

* fix mouse broadcast race condition

* stop mutating image elements when updating status

to fix race condition when closing/opening collab room

* check `files` when resolving `LayerUI`

* fix displaying AbortError
3 years ago
David Luzar 5c5b8c517f
fix: clear image/shape cache of affected elements when adding files (#4089) 3 years ago
David Luzar ba35eb8f8c
fix: pasting images on firefox (#4085) 3 years ago
David Luzar 163ad1f4c4
feat: image support (#4011)
Co-authored-by: Emil Atanasov <heitara@gmail.com>
Co-authored-by: Aakansha Doshi <aakansha1216@gmail.com>
3 years ago
Aakansha Doshi 463857ad9a
feat: Export THEME from the package (#4055)
* 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
3 years ago
Steve Ruiz 00c6940851
fix: freehand points (#4031)
Co-authored-by: dwelle <luzar.david@gmail.com>
4 years ago
David Luzar 54739cd2df
fix: abstract and fix legacy fs (#4032) 4 years ago
Shubham Shah 75aeaa6c38
fix: context menu positioning (#4025) 4 years ago
zsviczian 7d1fddc144
fix: onPaste should return false to prevent paste action (#3974)
* Update App.tsx

* Update README_NEXT.md

* Update CHANGELOG.md

* Update App.tsx

* Update App.tsx

* Update src/packages/excalidraw/CHANGELOG.md

* fix lint

Co-authored-by: Aakansha Doshi <aakansha1216@gmail.com>
4 years ago
David Luzar f0f13ed694
fix: permanent zoom mode (#3931) 4 years ago
David Laban 685abac81a
feat: resave to png/svg with metadata if you loaded your scene from a png/svg file (#3645)
Co-authored-by: dwelle <luzar.david@gmail.com>
4 years ago
David Luzar 0749d2c1f3
fix: color picker shortcuts not working when elements selected (#3817) 4 years ago
connorhanafee 5fabc57277
fix: view mode cursor adjustments (#3809) 4 years ago
David Luzar 55d3287abf
fix: include deleted elements when passing to restore (#3802) 4 years ago
Jakub Koralewski ee64a7e264
fix: ensure `s` and `g` shortcuts work on no selection (#3800)
Co-authored-by: dwelle <luzar.david@gmail.com>
4 years ago
David Luzar 097362662d
feat: pass localElements to restore and restoreElement API's and bump versions of duplicate elements on import (#3797) 4 years ago
connorhanafee 44402f42bf
feat: switch to selection tool on library item insert (#3773)
* switch to selection tool on library item insert

* add test

Co-authored-by: dwelle <luzar.david@gmail.com>
4 years ago
connorhanafee 969d3c694a
fix: keep binding for attached arrows after changing text (#3754)
Co-authored-by: David Luzar <luzar.david@gmail.com>
4 years ago
David Luzar 5cd921549a
fix: deselect elements on viewMode toggle (#3741) 4 years ago
Aakansha Doshi 9325109836
fix: use excal id so every element has unique id (#3696)
* fix: use excal id so every element has unique id

* fix

* fix

* fix

* add docs

* fix
4 years ago
Sakito Mukai 6b6002baae
refactor: Delete React SyntheticEvent persist (#3700) 4 years ago
Arun 4249de41d4
feat: Add prop `autoFocus` to set focus on the Excalidraw component (#3691)
* feat: Add prop autofocus to set focus on Excalidraw component

* Update PR number

* Make requested changes

* Add note

* Update src/packages/excalidraw/CHANGELOG.md

Co-authored-by: Aakansha Doshi <aakansha1216@gmail.com>

* Update src/tests/excalidrawPackage.test.tsx

Co-authored-by: Aakansha Doshi <aakansha1216@gmail.com>

* Remove duplicate sentence

* Indent note

* autofocus -> autoFocus

Co-authored-by: Aakansha Doshi <aakansha1216@gmail.com>
4 years ago
Aakansha Doshi 15f02ba191
refactor: code clean up (#3681)
* refactor: code clean up
Move types from App.tsx to types.ts
Move excalidrawPackage.test.tsx inside src/tests/package

* import type
4 years ago
David Luzar 035c7affff
fix: color pickers not opening on mobile (#3676) 4 years ago
David Luzar c819b653bf
fix: on contextMenu, use selected element regardless of z-index (#3668) 4 years ago
Aakansha Doshi ba48974351
feat: customise export dialog with UIOptions.canvasActions.export prop (#3658)
* refactor: update UIOptions.canvasActions.export to be a an object

* fix

* fix

* dnt show export icon when false

* fix

* inline

* memoize UIOptions

* update docs

* fix

* tweak readme

Co-authored-by: David Luzar <luzar.david@gmail.com>
4 years ago
Arun 6c3e4417e1
feat: Add shortcuts for stroke and background color picker (#3318)
* feat: Add shortcuts for opening stroke and background color picker

* Use App.tsx keydown handler

* only get selectedElements if applicable (perf)

* fix tests and snaps

* reuse `appState.openMenu`

Co-authored-by: dwelle <luzar.david@gmail.com>
4 years ago
David Luzar 790c9fd02e
feat: exporting redesign (#3613)
Co-authored-by: Aakansha Doshi <aakansha1216@gmail.com>
4 years ago
David Luzar 6d40039f08
feat: allow inner-drag-selecting with cmd/ctrl (#3603)
* feat: allow inner-drag-selecting with cmd/ctrl

* don't use  cursor when pressing cmd/ctrl

* ensure we reset deselected groups

* add tests

* add docs

* couple fixes around group selection
4 years ago
Aakansha Doshi 78da4c075e
feat: support updating appState in updateScene API (#3576)
* feat: support updating appState in updateScene API

* make `updateScene.data.appState` more type-safe

* restore `appState` when passing to `updateScene`

* fix

Co-authored-by: dwelle <luzar.david@gmail.com>
4 years ago
Aakansha Doshi 3b9290831a
refactor: rename renderTopRight prop to renderTopRightUI (#3572)
* refactor: rename renderTopRight prop to renderTopRightUI

* update

* fix

* update
4 years ago
David Luzar 91ab7f36e2
fix: restore on paste or lib import (#3558) 4 years ago
Steve Ruiz 49c6bdd520
feat: improved freedraw (#3512)
Co-authored-by: dwelle <luzar.david@gmail.com>
4 years ago
David Luzar bac76778ce
feat: add `renderTopRight` prop & remove GH corner from core (#3539)
* feat: add `renderTopRight` prop & remove GH corner from core

* reuse `--space-factor` var

* update readme & changelog
4 years ago
David Luzar 5cc3f7db80
feat: support scroll to center to single element and rename `setScrollToContent` (#3482)
Co-authored-by: Aakansha Doshi <aakansha1216@gmail.com>
4 years ago
Aakansha Doshi 5c42cb5be4
fix: only handle cut/paste events inside excalidraw (#3484)
* fix: only hand cut/paste events inside excalidraw

* changelog

* check if excalidraw is active for copy event

* check if active element is part of excalidraw
4 years ago
Aakansha Doshi d3106495b2
fix: make history local to a given excalidraw instance (#3481)
* fix: make history local to a given excalidraw instance

* changelog

* Update src/packages/excalidraw/CHANGELOG.md
4 years ago
Aakansha Doshi 891ac82447
fix: use active Excalidraw component when editing text (#3478)
* fix: use active excalidraw component when editing text

* changelog

* tweak
4 years ago
Aakansha Doshi 37d513ad59
feat: Make library local to given excalidraw instance and allow consumer to control it (#3451)
* feat: dnt share library & attach to the excalidraw instance

* fix

* Add addToLibrary, resetLibrary and libraryItems in initialData

* remove comment

* handle errors & improve types

* remove resetLibrary and addToLibrary and add onLibraryChange prop

* set library cache to empty arrary on reset

* Add i18n for remove/add library

* Update src/locales/en.json

Co-authored-by: David Luzar <luzar.david@gmail.com>

* update docs

* Assign unique ID to
 each excalidraw component and remove csrfToken from library as its not needed

* tweaks

Co-authored-by: David Luzar <luzar.david@gmail.com>

* update

* tweak

Co-authored-by: dwelle <luzar.david@gmail.com>
4 years ago
David Luzar 6730eb41c2
fix: scrollToContent only on visible elements (#3466) 4 years ago
David Luzar 7d29351d66
fix: library onClick paste off-center (#3462) 4 years ago
Aakansha Doshi 793b69e592
fix: Apply theme to only to active excalidraw component (#3446)
* feat: Apply theme to only current instance of excalidraw

* fix

* fix

* fix

* fix

* fix

* update changelog

* fix
4 years ago
Aakansha Doshi d126d04d17
feat: Bind keyboard events to the current excalidraw container and add handleKeyboardGlobally prop to allow host to bind to document (#3430)
* fix: Bind keyboard events to excalidraw container

* fix cases around blurring

* fix modal rendering so keyboard shortcuts work on modal as well

* Revert "fix modal rendering so keyboard shortcuts work on modal as well"

This reverts commit 2c8ec6be8e.

* Attach keyboard event in react way so we need not handle portals separately (modals)

* dnt propagate esc event when modal shown

* focus the container when help dialog closed with shift+?

* focus the help icon when help dialog on close triggered

* move focusNearestTabbableParent to util

* rename util to focusNearestParent and remove outline from excal and modal

* Add prop bindKeyGlobally to decide if keyboard events should be binded to document and allow it in excal app, revert tests

* fix

* focus container after installing library, reset library and closing error dialog

* fix tests and create util to focus container

* Add excalidraw-container class to focus on the container

* pass focus container to library to focus current instance of excal

* update docs

* remove util as it wont be used anywhere

* fix propagation not being stopped for React keyboard handling

* tweak reamde

Co-authored-by: David Luzar <luzar.david@gmail.com>

* tweak changelog

* rename prop to handleKeyboardGlobally

Co-authored-by: dwelle <luzar.david@gmail.com>
4 years ago
David Luzar a7cbe68ae8
refactor: improve types around dataState and libraryData (#3427) 4 years ago
Aakansha Doshi c19c8ecd27
feat: Add scroll listener to the nearest scrollable container and allow consumer to disable it (#3408)
* fix: Add scroll listener to the nearest scrollable container

* fix

* use loop instead of recursion

* fix

* return document

* calculate nearest scrollable container in settimeout to unblock main thread

* Add prop detectNearestScroll and clear timeout on unmount

* disable scroll listener on excal app

* update prop name to detectScroll

* update docs

* remove settimeout

* tweak docs

Co-authored-by: David Luzar <luzar.david@gmail.com>

* tweak changelog

Co-authored-by: David Luzar <luzar.david@gmail.com>

* lint

Co-authored-by: David Luzar <luzar.david@gmail.com>
4 years ago
Fabien BERNARD d91950bd03
feat: Add onPaste prop to customise clipboard paste event (#3420)
* Add Awaited type util

* Expose onPasteFromClipboard props

* Add `event` as second param for advanced usages

* Add support for async flows

* Extract ClipboardData type

* Rename `onPasteFromClipboard` to `onPaste`

* Remove unused type helper

* Add `onPaste` documentation

* tweak docs

* fix

Co-authored-by: Aakansha Doshi <aakansha1216@gmail.com>
4 years ago
David Luzar 09dfd16b17
feat: use component dimensions to break to mobile (#3414)
Co-authored-by: Jed Fox <git@jedfox.com>
4 years ago
Thang Vu a0899966ff
feat: enable drop event on the whole component (#3406)
Co-authored-by: Thang Vu <thang.huu.vu@mgm-tp.com>
4 years ago
David Luzar 9733ecb3df
fix: popover positioning (#3399) 4 years ago
Aakansha Doshi 90fd4a95df
refactor: rename setCanvasOffsets to refresh and release @excalidraw/excalidraw v0.6.0 🎉 (#3398)
* docs: Release @excalidraw/excalidraw v0.6.0

* update

* fix

* Update src/packages/excalidraw/README.md

Co-authored-by: David Luzar <luzar.david@gmail.com>

* rename setCanvasOffsets to refresh

* fix

* fix

* typo fix

Co-authored-by: David Luzar <luzar.david@gmail.com>
4 years ago
Thang Vu 67289ef4ce
feat: reopen library menu on import from file (#3383)
Co-authored-by: Thang Vu <thang.huu.vu@mgm-tp.com>
4 years ago
Arun 233576628c
feat: Support customising canvas actions 🎉 (#3364)
* feat: Support hiding save, save as, clear & export

* Remove canvasActions from state & minor changes

* Rename prop to UIOptions & pass default value

* Make requested changes

* better type checking so that optional check not needed at every point

* remove optional checks

* Add few tests

* Add describe block for canvasActions & use snapshot tests

* Add support for hiding canvas background picker

* Take snapshot of canvasActions instead of the whole app

* Add support for hiding dark mode toggle

* Update README.md

* Rename table heading

* Update changelog

* Make requested changes

* Update test name

* tweaks

Co-authored-by: Aakansha Doshi <aakansha1216@gmail.com>
4 years ago
Aakansha Doshi c54a099010
feat: Calculate `width/height` of canvas based on container dimensions (".excalidraw" selector) & remove props width & height (#3379)
* 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
4 years ago
Aakansha Doshi edc7f7bf47
feat: calculate offsets when excalidraw container resizes (#3374)
* feat: calculate offsets when excalidraw container resizes

* fix

* rename

* update docs

* Update src/packages/excalidraw/README_NEXT.md

Co-authored-by: David Luzar <luzar.david@gmail.com>
4 years ago
Aakansha Doshi 0d818f3810
feat: Add renderCustomStats prop and expose setToastMessage API via refs to update toast (#3360)
* feat: Add renderCustomStats prop to render extra stats & move storage and version to renderCustomStats

* expose Api to update toast message so single instance of toast is used

* rename to setToastMessage

* update docs
4 years ago
Aakansha Doshi 25fd275158
fix: Don't share collab types with core (#3353)
* fix: Don't share collab types with core

* fix

* remove

* fix
4 years ago
David Luzar 8670b2d587
fix: support d&d of files without extension (#3168) 4 years ago
David Luzar 30ae4b8bf2
feat: don't unnecessarily prompt when installing libraries (#3329) 4 years ago
David Luzar cf9e29834d
feat: prefer hash when importing libraries & expose importLibrary (#3320) 4 years ago
Riley Schnee b0d7ff290f
feat: Add option to flip single element on the context menu (#2520)
Co-authored-by: dwelle <luzar.david@gmail.com>
4 years ago
David Luzar 458e6d6c24
fix: state selection state on opening contextMenu (#3333) 4 years ago
Furkan Demir b50b8f7b0d
fix: disallow create text in viewMode on mobile (#3219) 4 years ago
Thomas Steiner f7e17a28fa
fix: Update browser-fs-access to use new supported export (#3303)
* Use new exported supported

* Bump to v0.15.3
4 years ago
Aakansha Doshi efb6d0825b
feat: Add label for name field and use input when editable in export dialog (#3286)
* feat: Add label for name field and use input when editable in export dialog

* fix

* review fix

* dnt allow to edit file name when view mode

* Update src/components/ProjectName.tsx

Co-authored-by: David Luzar <luzar.david@gmail.com>

Co-authored-by: David Luzar <luzar.david@gmail.com>
4 years ago
David Luzar cf6a5ff16b
fix: state continuously updated when holding ctrl/cmd (#3283) 4 years ago
Arun c3ecbcb3ab
feat: Allow host app to update title of drawing (#3273)
* Allow updating name on updateScene

* Revert "Allow updating name on updateScene"

This reverts commit 4e07a608d3.

* Make requested changes

* Make requested changes

* Remove customName from state

* Remove redundant if statement

* Add tests, update changelog and minor fixes

* remove eempty lines

* minor fixes

* no border and on hover no background change

* Give preference to name prop when initialData.appState.name is present and update specs

* minor fix

* Fix name input style in dark mode

Co-authored-by: Aakansha Doshi <aakansha1216@gmail.com>
4 years ago
Aakansha Doshi de99484a1f
feat: Expose the API to calculate offsets and remove offsetTop and offsetLeft props (#3265)
* feat: Expose the API to calculate offsets and remove offsetTop and offsetLeft props

* update

* fix tests

* fix

* update readme and changelog

* fix

* better
4 years ago
David Luzar add1785ace
fix: allow copying text outside the component (#3275) 4 years ago
David Luzar c1379c3c10
fix: Revert `906faaf0` #3206 (#3269) 4 years ago
Aakansha Doshi 052b73d95b
refactor: Rename prop scrollToCenter and setScrollToCenter to scrollToContent and setScrollToContent respectively (#3261)
* refactor: Rename prop scrollToCenter and setScrollToCenter to scrollToContent and setScrollToContent respectively

* fix

* update changelog/readme

* fix
4 years ago
David Luzar e90e56452f
fix: stop preventing canvas pointerdown/tapend events (#3207) 4 years ago
Jeremy Press 84a1863233
feat: Add theme prop (#3228)
* support appearance when updating scene data

* works!

* whoops, missed a prop

* hide appearance button when prop is not set

* cleanup

* fix export + rename prop to theme

* rename to showThemeBtn, hide via react instead of css

* adapt to new state name

* add tests and css selector to target the dark mode toggle

* updated changelog and readme

* fix markdown rendering in readme

* pr feedback
4 years ago
Arun b9e70ec666
feat: Implement the Web Share Target API (#3230)
* Use the web share target API

* Make requested changes

* Remove line

* Add application/json back

* Add application/vnd.excalidraw+json

* Add 'POST' check back

* Make requested changes

* Update src/appState.ts

Co-authored-by: Thomas Steiner <tomac@google.com>

* Update test

* Override initializeScene

* Use Excalidraw MIME type

* Minor fixes

* More MIME type tweaks

* More permissive file open

* Be overpermissive in file open

Co-authored-by: Thomas Steiner <tomac@google.com>
Co-authored-by: tomayac <steiner.thomas@gmail.com>
4 years ago
Aakansha Doshi f1daff2437
refactor: Rename appearance to theme (#3237)
* refactor: Rename appearance to theme

* fix

* update changelog

* rename theme_dark to theme--dark

* add about migration
4 years ago
David Luzar 91c8b6ecbf
feat: support `libraryReturnUrl` when installing libraries (#3227)
Co-authored-by: Aakansha Doshi <aakansha1216@gmail.com>
4 years ago
Aakansha Doshi 00ac804dd8
fix: Allow copy of excalidraw elements only when inside excalidraw (#3206)
* fix: Allow copy event only inside canvas

* use pointerdown

* use document.getSelection

* remove poiterdown

* remove keyTest

* update changelog
4 years ago
Thomas Steiner 1f7f07fbfb
Remove left-over ToDo comment 4 years ago
Aakansha Doshi 3a0a638a0d
fix: Position text editor absolute and fix the offsets so it doesn't remain fixed when container is scrolled (#3200)
* fix: Position text editor absolute and fix the offsets so it doesn't remain fixed when container is scrolled

* update changelog

* Update src/packages/excalidraw/CHANGELOG.md
4 years ago
dependabot[bot] 862c065e33
chore(deps): bump typescript from 4.1.5 to 4.2.3 (#3196)
* chore(deps): bump typescript from 4.1.5 to 4.2.3

Bumps [typescript](https://github.com/Microsoft/TypeScript) from 4.1.5 to 4.2.3.
- [Release notes](https://github.com/Microsoft/TypeScript/releases)
- [Commits](https://github.com/Microsoft/TypeScript/compare/v4.1.5...v4.2.3)

Signed-off-by: dependabot[bot] <support@github.com>

* hack types

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: dwelle <luzar.david@gmail.com>
4 years ago
Aakansha Doshi eb24e8ffe4
fix: Wrap excalidraw in position relative & hide scrollbars in zen mode (#3174)
* fix: wrap excalidraw in position relative so that host need not add it explicitly to fix positioning when non zero offsets

* patch version

* Hide scrollbars on excalidraw container

* remove overflow hidden from index.html since its handled in excalidraw container

* review fix

* update changelog
4 years ago
Aakansha Doshi 07e71a8071
fix: Reduce the scroll debounce timeout to 100ms and update only if offset changes (#3182)
* fix: Reduce the scroll debounce timeout to 100ms so offsets get updated faster when the container scrolled
fixes https://github.com/excalidraw/excalidraw/issues/3175

* update changelog

* update offsets only when if it changes

* up

* Update src/components/App.tsx

Co-authored-by: David Luzar <luzar.david@gmail.com>
4 years ago
David Luzar c77c9ce65a
fix: cursor being leaked outside of canvas (#3161) 4 years ago
Aakansha Doshi 7c5481b877
feat: Add support for scrollToCenter in initialData so host can control whether to scroll to center on mount (#3070)
* feat: Add support for scrollToCenter in initialData so host can control whether to scroll to center on mount

* fix

* update changelog and readme

* fix

* Scroll to center only for collab and shareable links in excalidraw app

* fix test

* update readme

* Update src/packages/excalidraw/README.md
4 years ago
Arun 74e82d0d7c
fix: Hide scrollbars on mobile (#3044)
* Hide scrollbars on mobile

* Fix package build

* Revert "Fix package build"

This reverts commit 7bf4a0aac1.

* Make requested changes
4 years ago
David Luzar e6cd97c4f2
feat: adjust line-confirm-threshold based on zoom (#2884)
Co-authored-by: Lipis <lipiridis@gmail.com>
4 years ago
Aakansha Doshi 830fb64a25
fix: Support Excalidraw inside scrollable container (#3018)
* refactor: remove position fixed from excalidraw container, modal and stats

* remove unused css

* remove position fixed from toast and scroll to content

* Make excal interactable by fixing offsets and set popover as fixed since position needs to be calculate from viewport  top

* Assign 200px less than height of Excalidraw to the selected shapes actions o UI doesn't overflow

* update changelog, readme and package.json
4 years ago
Ivan Kurnosov f8beb305de
refactor: Removed redundant import from `App.tsx` (#3040)
Given it's followed by qualified import - unqualified import looks redundant, unless I'm missing some tricky edge case.
4 years ago
Aakansha Doshi b5fc8757a4
fix: allow to toggle between modes when view only mode to make UI consistent (#3009) 4 years ago
David Luzar 4b253c7362
fix: refresh wysiwyg position on canvas resize (#3008) 4 years ago
Aakansha Doshi 066560311b
feat: add props zenModeEnabled and gridModeEnabled so host can control completely (#2901)
* feat: add props zenModeEnabled and gridModeEnabled so host can control completely

* dnt show exit zenmode button when prop present

* fix

* update when props change

* Add tests

* Add tests

* update changelog and readme

* update

* Update src/tests/excalidrawPackage.test.tsx

* Update src/packages/excalidraw/README.md

Co-authored-by: Lipis <lipiridis@gmail.com>

* Update src/packages/excalidraw/README.md

Co-authored-by: David Luzar <luzar.david@gmail.com>

* Apply suggestions from code review

Co-authored-by: David Luzar <luzar.david@gmail.com>

* fix specs

Co-authored-by: Lipis <lipiridis@gmail.com>
Co-authored-by: David Luzar <luzar.david@gmail.com>
4 years ago
David Luzar e18e945cd3
fix: incorrect z-index of text editor (#2914) 4 years ago
Lipis bd0c6e63ff
feat: Show version in the stats dialog (#2908)
Co-authored-by: dwelle <luzar.david@gmail.com>
4 years ago
Christophe pasquier dbae33e4f8
fix: make scrollbars draggable when offsets are set (#2916)
Co-authored-by: dwelle <luzar.david@gmail.com>
4 years ago
Thomas Steiner 1837147c55
feat: Add idle detection to collaboration feature (#2877)
* Start idle detection implementation

* First working version

* Add screen state

* Add type safety

* Better rendering, enum types, localization

* Add origin trial token

* Fix

* Refactor idle detection to no longer use IdleDetector API

* Cleanup some leftovers

* Fix

* Apply suggestions from code review

* Three state: active 🟢, idle 💤, away ️

* Address feedback from code review
Thanks, @lipis

* Deal with unmount

Co-authored-by: Panayiotis Lipiridis <lipiridis@gmail.com>
4 years ago
Aakansha Doshi 675da16ca4
feat: add view mode in Excalidraw (#2840)
Co-authored-by: Lipis <lipiridis@gmail.com>
4 years ago
David Luzar 1973ae9444
fix: stop flooring scroll positions (#2883) 4 years ago
David Luzar 10cd6a24b0
feat: increase max zoom (#2881) 4 years ago
David Luzar 6abf4f52ff
refactor: remove duplicate key handling (#2878) 4 years ago
Aakansha Doshi 4624ec2bd6
fix: apply initialData appState for zenmode and grid stats and refactor check param for actions (#2871)
* fix: pass default value for grid mode / zen mode so it sets the value from initialData appState

fixes #2870

* change checked from boolean to be a function which recieves appState and returns boolean

* fix

* use clsx

Co-authored-by: dwelle <luzar.david@gmail.com>
4 years ago
Arun e8685c5236
feat: Remove copy & paste from context menu on desktop (#2872)
* Remove copy & paste from context menu on desktop

* fix build

* Make requested changes

* More changes

* make into function

* update changelog

* fix tests

Co-authored-by: dwelle <luzar.david@gmail.com>
4 years ago
Aakansha Doshi 6e9df2bae7
fix(app.tsx): show correct state of Nerd stats in context menu when nerd stats dialog closed (#2874)
fixes #2873
4 years ago
Kartik Prajapati 978e85a33b
feat: Add separators on context menu (#2659)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: dwelle <luzar.david@gmail.com>
Co-authored-by: Lipis <lipiridis@gmail.com>
4 years ago
David Luzar 0a0be839b9
refactor: rewrite collabWrapper to remove TDZs and simplify (#2834) 4 years ago
Victor Massé ce2c341910
feat: Change shortcuts menu to help menu (#2812)
Co-authored-by: Panayiotis Lipiridis <lipiridis@gmail.com>
4 years ago
João Forja e26f374ca6
improvement: Enhance resize for non generic elements (#2720) 4 years ago
Arun 543c624405
feat: Add toast (#2772)
Co-authored-by: Lipis <lipiridis@gmail.com>
Co-authored-by: dwelle <luzar.david@gmail.com>
4 years ago
David Luzar 04c46fc01a
fix: don't render due to zoom after unmount (#2779)
* fix: don't render due to zoom after unmount

* update changelog

* remove unnecessary flush
4 years ago
Carl Sverre 629341da4d
improvement: adding zen mode to context menu (#2734) 4 years ago
Lipis 3aa01ad272
chore: Remove tracking (#2722)
* chore: Remove tracking

* process

* rename

* remove

* prod

* Update public/index.html

Co-authored-by: David Luzar <luzar.david@gmail.com>

* Update public/index.html

* eol

* more

* stats

Co-authored-by: David Luzar <luzar.david@gmail.com>
4 years ago
Jaiwanth 4acdc47ef0
improvement: do not reset to selection for draw tool (#2721)
Co-authored-by: Lipis <lipiridis@gmail.com>
Co-authored-by: dwelle <luzar.david@gmail.com>
4 years ago
Aakansha Doshi ade2565f49
feat: add langCode and renderFooter props (#2644)
Co-authored-by: Aakansha Doshi <aakansha1216@gmail.com>
Co-authored-by: dwelle <luzar.david@gmail.com>
4 years ago
David Luzar aef3644c93
fix: scene not initialized properly when tab not focused (#2677)
Co-authored-by: Lipis <lipiridis@gmail.com>
4 years ago
Lipis 022f349dc6
feat: Add line chart and paste dialog selection (#2670)
Co-authored-by: dwelle <luzar.david@gmail.com>
Co-authored-by: Jed Fox <git@jedfox.com>
4 years ago
Luo bc414ccaaf
feat: tweak editing behavior (#2668)
* feat: tweak editing behavior

* fix tests

Co-authored-by: dwelle <luzar.david@gmail.com>
4 years ago
Lipis d7f314cda8
refactor: Remove duplicate entry from en.json (#2654) 4 years ago
Lipis 6adb45ef5a
feat: Change title to Excalidraw after a timeout (#2656)
* feat: Change title to Excalidraw after a timeout

* clear timeout
4 years ago
Rene 0faec7efb6
feat: Checkmark to toggle context-menu-items (#2645) 4 years ago
Christopher Chedeau 9a3a3ecb44
fix: Center zoom on iPhone and iPad (#2642)
My last attempt removed the gesture handler altogether but broke macbooks. This one keeps it working on macbook but makes sure it zooms properly on iPhone and iPad.
4 years ago
Christopher Chedeau 81f8039ec7
fix: Don't break zoom when zooming in on UI (#2638)
If you start the gesture on the chrome, gesture is not defined and the zoom will be set to NaN and you will have to refresh.

Typescript was actually right and we shouldn't have overridden the bang ;)

Repro:
- On iPhone touch down on a shape, touch down on the chrome, start moving around
- See that the selection is off, but the zoom is not being modified like crazy.

https://user-images.githubusercontent.com/197597/102722206-6c182400-42b4-11eb-9865-6ae1cd0af9be.MP4
4 years ago
Aakansha Doshi 325d1bec91
feat: Add onExportToBackend prop so host can handle it (#2612)
Co-authored-by: dwelle <luzar.david@gmail.com>
4 years ago
Andrés Rivera fb582b45db
fix: Fix centering element on init (#2445)
Co-authored-by: Andrés Rivera <andres@MBP.local>
Co-authored-by: Lipis <lipiridis@gmail.com>
Co-authored-by: dwelle <luzar.david@gmail.com>
4 years ago
João Forja 4c7b1a2269
fix: Visibility and zooming when canvas offset is not zero (#2534) 4 years ago
Zen Tang 802b8c50d5
Insert Library items in the middle of the screen (#2527)
Co-authored-by: Zen Tang <zen@wayve.ai>
4 years ago
Rene 94fe1ff6e6
Show shortcut context menu (#2501)
Co-authored-by: rene_mbp <harryloveslearning@googlemail.com>
Co-authored-by: dwelle <luzar.david@gmail.com>
4 years ago
Steve Ruiz 9cfe7b45e5
Aligns arrowhead schemas (#2517) 4 years ago
Zen Tang 1a134a88bd
Add Cut to menus (#2511)
Co-authored-by: Zen Tang <zen@wayve.ai>
4 years ago
Lipis b2d442abce
Support CSV graphs and improve the look and feel (#2495)
Co-authored-by: David Luzar <luzar.david@gmail.com>
Co-authored-by: dwelle <luzar.david@gmail.com>
4 years ago
David Luzar 4672a2a135
fix misaligning on grid paste (#2494)
* fix misaligning on grid paste

* tweak naming
4 years ago
Aakansha Doshi 8f8fd023f8
fix(app.tsx): add safe check for readyPromise (#2489)
* fix(app.tsx): add safe check for readyPromise

* make type-safe

Co-authored-by: dwelle <luzar.david@gmail.com>
4 years ago
Steve Ruiz c291edfc44
Add Arrowheads to Arrows (#2452)
Co-authored-by: dwelle <luzar.david@gmail.com>
Co-authored-by: Lipis <lipiridis@gmail.com>
4 years ago
David Luzar 3be5038c14
Revert "Remove native gesture "support" from iOS (#2457)" (#2483)
This reverts commit 2b6d1470f9.
4 years ago
Lipis dd993adc5c
Add stats for nerds (#2453)
Co-authored-by: David Luzar <luzar.david@gmail.com>
Co-authored-by: dwelle <luzar.david@gmail.com>
4 years ago
João Forja aa221837fc
Enhance aspect ratio tools | Rectangle, Diamond, Ellipses (#2439)
Co-authored-by: dwelle <luzar.david@gmail.com>
4 years ago
Christopher Chedeau 2b6d1470f9
Remove native gesture "support" from iOS (#2457)
We were processing both the touch move and gesture on iOS which was first firing twice as many set state, but also caused issues:
- The gesture implementation didn't support zooming on the center
- Touching down on a circle and then on the bottom chrome would freak out because initialScale was null

Touching down on the menu still isn't perfect as it shifts the shape around but doesn't completly break the zoom
4 years ago
Christopher Chedeau 545b214558
Don't open context menu when multi-touch (#2455)
This was very annoying when you would zoom on mobile and the context menu would appear.

The problem was the following:
- You put a finger in, it creates a timeout
- You put a second finger in, it creates another timeout
- 300ms elapsed, which is not that much
- The context menu opens
- Now you move your fingers, which works, but the context menu is still open

The fix is to invalidate the context menu if a second finger is added even if the first one hasn't moved.
4 years ago
Aakansha Doshi e617ccc252
Factor out collaboration code (#2313)
Co-authored-by: Lipis <lipiridis@gmail.com>
Co-authored-by: dwelle <luzar.david@gmail.com>
4 years ago
Lipis e392bebc40
Add library events (#2448) 4 years ago
Lipis 66e5b18e4e
Add more events for sharing and refactor I/O, dialogs (#2443) 4 years ago
Lipis 0ef60dce2d
More export events (#2441) 4 years ago
Lipis abde1daba4
Add basic event actions to analytics (#2375)
Co-authored-by: dwelle <luzar.david@gmail.com>
4 years ago
Lipis 014097a97e
refactor: Stop using the deprecated keyCode (#2426)
Co-authored-by: Lipis <lipiridis@gmail.com>
Co-authored-by: David Luzar <luzar.david@gmail.com>
4 years ago
Aakansha Doshi 084aff2bf3
fix(app.tsx): use cursorx, cursory in onGestureChange as pointers are empty (#2424) 4 years ago
Lipis b21fd49412
chore: Minor refactoring for consistency (#2425) 4 years ago
David Luzar bf143ed0b8
ignore CapsLock when handling keyDown event (#2373)
* ignore CapsLock when handling keyDown event

* fix `this`
4 years ago
David Luzar 5b829772d9
Fix library import (#2360) 4 years ago
Lipis e05acd6fd9
Update ESLint rules (#2342) 4 years ago
Lipis 5d295415db
Keep errors, elements and comments consistent (#2340)
Co-authored-by: David Luzar <luzar.david@gmail.com>
4 years ago
João Forja 566e6a5ede
Zoom on cursor | Issue #940 (#2319) 4 years ago
David Luzar ba3f548b91
Fix library dnd (#2314) 4 years ago
Giacomo Debidda fc58e51ab3
Show error message when canvas to export is too big (#1256) (#2210)
Co-authored-by: dwelle <luzar.david@gmail.com>
4 years ago
David Luzar f404ab6f50
clear deleted elements on room create (#2270) 4 years ago
David Luzar 900e0f27ad
expose resetHistory & factor out from updateScene (#2277) 4 years ago
Aakansha Doshi e916d7f6f6
expose resetScene and getSceneElementsIncludingDeleted && move excalidrawApp to excalidraw-app folder (#2272)
Co-authored-by: dwelle <luzar.david@gmail.com>
4 years ago
David Luzar 72a3450c99
allow to supply canvas offsets from upstream (#2271) 4 years ago
Aakansha Doshi 499a60309f
factor reconcilation out of `updateScene` & remove `replaceAll` (#2266)
Co-authored-by: dwelle <luzar.david@gmail.com>
4 years ago
Aakansha Doshi 6db5647048
move broadcastScene and broadcastMouseLocation to portal (#2262) 4 years ago
David Luzar 1484c5a63b
fileHandle refactor & fixes (#2252) 4 years ago
David Luzar 538f2be097
add export error handling (#2243) 5 years ago
David Luzar 5950fa9a40
support embedding scene data to PNG/SVG (#2219)
Co-authored-by: Lipis <lipiridis@gmail.com>
5 years ago
David Luzar 7618ca48d7
retain local appState props on restore (#2224)
Co-authored-by: Lipis <lipiridis@gmail.com>
5 years ago
Aakansha Doshi 63566ecb92
Expose update scene via refs (#2217)
Co-authored-by: dwelle <luzar.david@gmail.com>
5 years ago
David Luzar d18a72c879
save room to firebase on unload or portal close (#2207)
* save on unload or portal close

* align naming
5 years ago
David Luzar ae1ab1ab37
clear scene when joining a room (#2208)
* clear scene when joining a room

* code shuffle

* remove noop code path
5 years ago
Pete Hunt d0985fe67a
Persistent rooms via Firebase (#2188)
* Periodically back up collaborative rooms in firebase

* Responses to code review

* comments from code review, new firebase credentials
5 years ago
Pete Hunt 8ab9ffbe28
One-click installable libraries (#2179)
Co-authored-by: dwelle <luzar.david@gmail.com>
5 years ago
Aakansha Doshi a61b212220
scope css under name space excalidraw (#1983) 5 years ago
David Luzar adb1ac5788
fix restoring appState (#2182) 5 years ago
Thomas Steiner b2822f3538
Make File Handling actually work (#2181)
Follow-up from #1736
5 years ago
Pete Hunt 68bdfaefbe
Fix pinch-to-zoom performance (#2171) 5 years ago
Pete Hunt e3f3427b31
Fix middle mouse panning on windows (#2172) 5 years ago
João Forja 242ccac290
Arrows binds/unbinds to bindable elements when moved with arrow keys (Issue #2103) (#2150) 5 years ago
Robert van Hoesel c6736fa14e
Lock drag direction using `Shift` (#1858)
Co-authored-by: dwelle <luzar.david@gmail.com>
5 years ago
David Luzar aaddde5dd9
Fix history initialization (#2115) 5 years ago
Mohamed Saleh 9cac7816cc
Fix textbox element bindings on size changes (#2145)
Co-authored-by: dwelle <luzar.david@gmail.com>
5 years ago
David Luzar 47dba05c91
System clipboard (#2117) 5 years ago
Michal Srb 15e4b51bb1
Fix binding disabling when taking screenshots on macOS (#2129)
* Fix binding disabling when taking screenshots on macOS
* Update snapshot for cmd+click test
5 years ago
Thomas Steiner 730a11e0a5
Assign file handle to dropped files (#2125)
Co-authored-by: David Luzar <luzar.david@gmail.com>
5 years ago
João Forja 0ab58b38e0
Fix bug of issue #2062 (#2108)
Co-authored-by: dwelle <luzar.david@gmail.com>
5 years ago
Maurice Le Cordier d15444e232
allowed for sticking to grid when pasting an element (#2107) 5 years ago
Michal Srb 7ebeae2d38
Fix arrow rebinding on rotation (take 2) (#2104)
* Clear up test, fix simple rotation
* Fix eligibility rules
5 years ago
David Luzar 26ef235019
rebind arrow on rotation (#2096) 5 years ago
David Luzar 0e28177ccc
fix collab MOUSE_LOCATION payload naming for legacy versions (#2098) 5 years ago
Anton 1828a93ba7
Fix keypress rebinding (#2102)
Co-authored-by: Anton <anton.matrenin@introduct.tech>
5 years ago
Daishi Kato 84c49ebaa1
Support rotating two-point lines (angle can be non-zero) (#2090)
Co-authored-by: David Luzar <luzar.david@gmail.com>
5 years ago
David Luzar 4c2d34ffd7
select single element on cmd-click (#2087) 5 years ago
David Luzar b8f8bc2e32
fix group selection (#2092) 5 years ago
João Forja e7d186b439
Fix drag multiple elements bug (#2023)
Co-authored-by: dwelle <luzar.david@gmail.com>
5 years ago
Aakansha Doshi 4718c31da5
Pass Additional props remove localstorage related code for storing data and username from App.tsx to index.tsx (#2057)
Co-authored-by: dwelle <luzar.david@gmail.com>
5 years ago
David Luzar ab7073abdb
add excalidraw_embed into base repo (#2040)
Co-authored-by: Lipis <lipiridis@gmail.com>
5 years ago
Thomas Steiner 80cbe13167
Make iOS "safe area" respect dark mode (#2053) 5 years ago
Warren Seine 4644ca1778
🎨 Use consistent naming (#2029) 5 years ago
Daishi Kato 41cb1fbeba
feat: sharpness (#1931)
* feat: sharpness

* feat: fill sharp lines, et al.

* fix: rotated positioning

* chore: simplify path with Q

* fix: hit test inside sharp elements

* make sharp / round buttons work properly

* fix tsc tests

* update snapshots

* update snapshots

* fix: sharp arrow creation error

* fix merge and test

* avoid type assertion

* remove duplicate helper

Co-authored-by: dwelle <luzar.david@gmail.com>
5 years ago
Warren Seine 2cb8ba6521
add explanation for why we mutate collaborators state (#2028)
* 🔒 Avoid mutating state

* revert to mutation and add explaining comment

Co-authored-by: dwelle <luzar.david@gmail.com>
5 years ago
Michal Srb c0dd870c6e
Dark mode (#2006)
Co-authored-by: dwelle <luzar.david@gmail.com>
5 years ago
David Luzar 950bcd0b72
Refactor resize handle naming (#2013) 5 years ago
Michal Srb 26f67d27ec
Allow binding linear elements to other elements (#1899)
* 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
5 years ago
wasp77 5f195694ee
update simplifier distance to reflect zoom (#2004)
* update simplifier distance to reflect zoom

The distance used in the iterative end-point fit algorithm to
determine if points can be removed no longer ignores the
zoom. As the zoom gets larger this distance will get smaller
and fewer points will be removed, thus making for finer grain
control over the drawing. As the zoom gets smaller the drawing
will get more coarse as more points are removed.

* remove the comment

Co-authored-by: John Dupuis <wasp7@Johns-MacBook-Pro.local>
Co-authored-by: Michal Srb <xixixao@seznam.cz>
5 years ago
Rene 403e8bd307
clear selection from copied/duplicatated group (#1973)
Co-authored-by: rene_mbp <harryloveslearning@googlemail.com>
Co-authored-by: dwelle <luzar.david@gmail.com>
5 years ago
Daishi Kato 818821c293
feat: grid mode for line editing (#1984) 5 years ago
David Luzar c171fb4c7f
simplify by replacing draggingElementPointIndex with isDragging (#1982)
* simplify by replacing draggingElementPointIndex with isDragging

* add tsdoc
5 years ago
Aakansha Doshi 20500b7822
remove shared global scene and attach it to every instance (#1706)
Co-authored-by: dwelle <luzar.david@gmail.com>
5 years ago
Christopher Chedeau 925db9dcca
Only insert text on double click when selection is enabled (#1937)
This was an oversight to enable it for all the shapes. I don't believe that we want to be able to insert text on double click when drawing a rectangle for example. And it's definitely a broken experience when doing so for free draw.

Fixes part of #1935
5 years ago
Mohammed Salman ee8fa6aaad
Import and export library from/to a file (#1940)
Co-authored-by: dwelle <luzar.david@gmail.com>
5 years ago
Aakansha Doshi 7eff6893c5
calculate coords based on container viewport position (#1955)
* 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>
5 years ago
Daishi Kato a2e7d8d560
feat: rotating multiple elements (#1960) 5 years ago
David Luzar dc1f6c4d4c
change selection/line/draw shortcut defaults (#1953) 5 years ago
David Luzar b07aa6e205
delay scene init until document active (#1920)
* delay scene init until document active

* use opts.once for the listener
5 years ago
David Luzar c1488fa353
try/catch localStorage access (#1932) 5 years ago
Mohammed Salman bac20fa641
Choosing color before entering text does not update the swatch (Fixes #1897) (#1915)
Co-authored-by: dwelle <luzar.david@gmail.com>
5 years ago
Aakansha Doshi 953cd5563c
move the excalidraw props to correct file and typo fix (#1907) 5 years ago
Pete Hunt 6428b59ccb
Library MVP (#1787)
Co-authored-by: dwelle <luzar.david@gmail.com>
5 years ago
David Luzar 7ab0c1aba8
reload scene on hashchange (#1893)
* reload scene on hashchange

* tweak isLoading
5 years ago
Michal Srb 4ab4fce998
Refactoring in pointer down event handler, step 3 (#1888)
* 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
5 years ago
Michal Srb 5664de0459
Refactoring in pointer down event handler, step 2 (#1887)
* 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
5 years ago
Michal Srb 5d7020cce6
Refactoring in pointer down event handler (#1880)
* 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
5 years ago
David Luzar d5e7d08586
prompt when loading external scene before overriding local one (#1862) 5 years ago
Aakansha Doshi 9351b2821c
feat: add width, height as props to App.tsx (#1871) 5 years ago
David Luzar b1261eea70
duplicate point on cmd+d (#1831) 5 years ago
Mehedi Hassan cc52ea4ac2
Add support for long press to context menu on iOS (#1769)
* 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
5 years ago
David Luzar cd87bd6901
do not center text when not applicable (#1783) 5 years ago
Daishi Kato 9c89504b6f
fix: start dragging grouped elements (#1818)
Co-authored-by: dwelle <luzar.david@gmail.com>
5 years ago