Commit Graph

783 Commits

Author SHA1 Message Date
Felix Zedén Yverås 3659ba9143 fix: release pointer capture when using onPointerLeave events
Certain input sources (such as touch) are "captured" when they
press an element. This means the pointer is always considered
"inside" the element by the browser, even when they visually are
not. This caused some issues on mobile browsers where touch and
stylus events could not connect table columns with each other.

Just to be safe, I've added the required `releasePointerCapture`
call everywhere `onPointerEnter` or `onPointerLeave` is used.
2024-07-17 22:22:52 +02:00
Felix Zedén Yverås 47fce123d3 feat: support scroll wheel panning
This is similar to tools like figma, where the scroll wheel pans
the view and scroll is only done if the control key is pressed.

New bindings:
scroll wheel: pan y
shift + scroll wheel: pan x
ctrl + scroll wheel: zoom
2024-07-17 22:22:52 +02:00
Felix Zedén Yverås 67851dad8f fix: reduce jitter by disabling pointer events on line 2024-07-17 22:22:52 +02:00
Felix Zedén Yverås e4e22dee20 fix: rewrite coordinate management
After some initial smaller fixes, it turned out that I had broken
the red line used when linking fields. Fixing this was not trivial
as I found myself battling a lot of small bugs relating to scale
and translation in the existing code. This was made extra difficult
as a lot of coordinates were calculated when necessary in
Canvas.jsx.

This commit attempts to simplify the coordinate management in a few
different ways:
* There are now two distinct coordinate systems in use, typically
  referred to as "spaces". Screen space and diagram space.
* Diagram space is no longer measured in pixels (though the
  dimension-less measure used instead still maps to pixels at 100%
  zoom).
* The canvas now exposes helper methods for transforming between
  spaces.
* Zoom and translation is now managed via the svg viewBox property.
  * This makes moving items in diagram space much easier as the
    coordinates remain constant regardless of zoom level.
* The canvas now wraps the current mouse position in a context
  object, making mouse movement much easier to work with.
* The transform.pan property now refers to the center of the screen.

A new feature in this commit is that scroll wheel zoom is now based
on the current cursor location, making the diagram more convenient
to move around in.

I have tried to focus on Canvas.jsx and avoid changes that might be
desctructive on existing save files. I also believe more refactors
and abstractions could be introduced based on these changes to make
the diagram even easier to work with. However, I deem that out of
scope for now.
2024-07-17 22:22:52 +02:00
Felix Zedén Yverås 32c82168fe feat: add debug coordinate overlay
Makes debugging issues in conversion from screen space
to diagram space easier.

Only adding english translations as I do not speak the
other languages.
2024-07-14 15:36:54 +02:00
Felix Zedén Yverås 354ea47529 fix: validate transform data before storage
During testing I accidentally managed to submit `NaN` as a pan
coordinate. This had the unfortunate side effect of bricking the
editor.

Given the serverity of an accidental `NaN` and that `NaN`s are not
impossible considering the amount of math involved in mouse move
operations, this commit introduces a simple validation step.

The new validation step should additionally be able to unstuck
anyone who have happened into this state by accident already.
2024-07-14 15:36:54 +02:00
Felix Zedén Yverås cdecf7c633 feat: add basic touchscreen support
This is basically a migration from mouse events to
[pointer events](
  https://developer.mozilla.org/en-US/docs/Web/API/Pointer_events
).

The `PointerEvent` interface inherits all of the `MouseEvent`
properties, meaning that existing code can essentially be left
as-is. The only major change is making sure we only respond to the
"primary" pointer.

Known issues include:
* stylus hover is not detected
* touchscreens do not have a concept of hover, making it difficult
  to e.g. resize areas
* no touch gesture support, e.g. "pinch-to-zoom"
2024-07-14 15:36:54 +02:00
Felix Zedén Yverås 075a98d444 fix: remove unused ref 2024-07-14 15:36:54 +02:00
Felix Zedén Yverås caae8e7385 fix: improve support for browsers with collapsing url bars
Some mobile browsers (e.g. chrome) uses collapsing url bars (the
bar collapses when you scroll). In such cases, `100vh` typically
refers to the full height of the viewport when the url bar is
collapsed (see also `svh`, `lvh` and `dvh`, e.g. at
<https://ishadeed.com/article/new-viewport-units/#the-small-large-and-dynamic-viewport-units>
). This meant that on my tablet, the editor would extend below the
visible page until I scrolled it into view.

This commit re-uses a fix from some of my other projects
(specifically
<https://github.com/dansdata-se/api/blob/5c7e788d40006097a258be5dbfe456cb260fa25f/src/styles/globals.css#L14-L28>
) where the root element is set to fill 100% height. This avoids
dealing with viewport units altogether. On my tablet, this means
that the url bar is visible and that the editor does not extend
below the visible page.
2024-07-14 15:36:54 +02:00
lilit 4a7d312e2a Merge pull request #153 from FelixZY/fzy/url/1
fix: update remaining vercel urls to drawdb.app
2024-07-14 00:45:53 +04:00
Felix Zedén Yverås 95e84705fb fix: update remaining vercel urls to drawdb.app
@1ilit started making similar changes in 4cc0811.

This commit performs a full search and replace for
`drawdb.vercel.app` to `drawdb.app`, fixing remaining "bad" urls.
2024-07-13 12:58:36 +02:00
1ilit a459f36f58 Fix increment being deleted when type is updated 2024-07-10 21:23:30 +03:00
1ilit 84abae7d06 Save database type and enums for templates 2024-07-08 11:54:04 +03:00
1ilit 6fee6553f1 Remove unnecessary commas in export index statements 2024-07-08 04:22:44 +03:00
1ilit 159dcca4dc Fix import diagram 2024-07-08 04:03:41 +03:00
1ilit 09f9117b72 Remove unused console.logs 2024-07-08 03:39:01 +03:00
1ilit f682abdafe Fix import index for postgres 2024-07-08 03:34:01 +03:00
1ilit 52455a75d0 Make databases a proxy 2024-07-08 03:21:43 +03:00
1ilit c84990ca6d Fix loading the diagram on open to load in types and enums 2024-07-08 02:18:12 +03:00
1ilit c907cfea47 Add database icon to diagrams 2024-07-08 02:09:51 +03:00
1ilit 7c7177c402 Update landing page 2024-07-08 01:58:16 +03:00
1ilit 4cc0811bc1 Update README to have twitter link and new url 2024-07-08 01:51:46 +03:00
1ilit aecc5a134e Fix choose database not showing on first ever diagram 2024-07-08 01:42:48 +03:00
1ilit 322bb6e988 Merge branch 'main' into select-db
# Conflicts:
#	src/i18n/locales/en.js
#	src/utils/exportSQL/generic.js
2024-07-07 17:57:33 +03:00
1ilit d5568c42bf Fix scrollbar height and corner 2024-07-07 17:21:54 +03:00
1ilit 9e2bb48fb8 Fix quotes on columns in checks 2024-07-07 16:55:04 +03:00
1ilit 897c125e3b Import from mssql 2024-07-06 21:45:51 +03:00
1ilit 982cac1d3a Remove types from mssql 2024-07-06 16:12:09 +03:00
1ilit a3976bf250 Export mssql 2024-07-06 14:52:42 +03:00
1ilit 1580641e97 Delete types and enums on clear 2024-07-05 22:29:42 +03:00
1ilit c005020048 Add option to declare an array 2024-07-05 22:28:44 +03:00
1ilit 9b606114df Rename TablesContext to DiagramContext 2024-07-04 23:18:20 +03:00
1ilit 3b1af3772e Add empty enums illustration 2024-07-04 23:06:09 +03:00
1ilit a7fd4ec416 Fix select db modal opening after close 2024-07-04 20:57:06 +03:00
1ilit d00c21b2e3 Add MSSQL types 2024-07-04 19:42:11 +03:00
1ilit d7025e1ff1 Add error checking for enums 2024-07-04 02:10:24 +03:00
1ilit d48ccfff4b Add enums to select types 2024-07-03 21:54:46 +03:00
1ilit 7c1eecd7a0 Undo and redo enum editing 2024-07-03 21:21:44 +03:00
1ilit 1430db881c Export and import enums in diagrams 2024-07-03 13:25:24 +03:00
1ilit 219a5a877b Fix UNIQUE not added in postgres 2024-07-03 03:27:36 +03:00
1ilit 61d97e8143 Import implicit foreign keys 2024-07-03 03:08:53 +03:00
1ilit c1f651cb54 Clean up postgres export 2024-07-03 00:33:23 +03:00
1ilit 3c1e72fbdd Export enums to sql 2024-07-02 23:26:45 +03:00
1ilit 55295a6790 Add FUNDING.yml 2024-07-02 13:18:38 +03:00
1ilit dd2aafe80b Import enums from source 2024-06-30 15:38:25 +03:00
1ilit 5b18b02946 Fix db names on open modal 2024-06-30 13:36:57 +03:00
1ilit 85ccb19d8f Show info icon only for generic diagrams 2024-06-30 13:22:34 +03:00
1ilit 810afe4bc0 Add enums tab 2024-06-30 13:19:21 +03:00
lilit 9acc619d47 Merge pull request #137 from huyjs9/feat/search-nested-fields-tables
Search nested fields in tables
2024-06-27 11:55:48 +03:00
1ilit 259835892a Fix add field for types to work with dbToTypes 2024-06-27 11:34:21 +03:00