Commit Graph

41 Commits

Author SHA1 Message Date
sawka
b0ca64f3cb null check 2024-07-05 16:20:36 -07:00
Evan Simkowitz
449f8bf7ef
Fix error where resize handle doesn't work after creating new block 2024-07-03 15:31:39 -07:00
Evan Simkowitz
75c9e211d9
Add resize handles to the layout system (#66)
Adds resizability to the layout system.

Hovering in the margins of a block will highlight the available resize
handle and show a cursor indicating its resize direction. Dragging will
cause the resizing nodes to blur out and be replaced by an outline.
Releasing the handle will commit the new resize operation and cause the
underlying nodes to update to their new sizes.

We'll want to refactor this in the future to move all layout and resize
logic into a shared model that the TileLayout code can talk to, but
that's a future improvement. For now, this makes some compromises,
mainly that the logic is kind of distributed around.

---------

Co-authored-by: sawka <mike.sawka@gmail.com>
2024-07-03 14:31:02 -07:00
Evan Simkowitz
c9cf88eb5e
Use translate3d for layout transforms to trick browser into using GPU acceleration (#85) 2024-06-27 14:36:58 -07:00
Evan Simkowitz
638883eef9
Fix Storybook for TileLayout (#81)
Fix typing of memoized TileLayout component, fix broken Vite config,
upgrade Storybook to latest.
2024-06-26 12:22:27 -07:00
Mike Sawka
4f627a0342
react.memo (#79) 2024-06-26 09:31:43 -07:00
sawka
7bf64fb268 wsh view works -- uses a WS event to send to the frontend 2024-06-24 19:04:08 -07:00
Mike Sawka
0ea8e5ac88
integrate part of keyutil, and implement tab and block movement with keyboard (#70) 2024-06-21 12:32:38 -07:00
Evan Simkowitz
2c6f6d917f
Fix greedy rendering of drag preview (#68) 2024-06-21 10:18:35 -07:00
sawka
c7f76d5ced implement drag handles 2024-06-19 23:00:57 -07:00
Evan Simkowitz
58684744b0
update imports 2024-06-19 12:22:34 -07:00
Evan Simkowitz
264d6568e2
remove unnecessary log 2024-06-19 12:18:43 -07:00
Evan Simkowitz
bfa4bb259e
Clear a drag placeholder if the user drags an item out of the layout's hit trap (#61) 2024-06-19 11:15:14 -07:00
Mike Sawka
15681ffa1a
create blockframes to replace blockheader (#59)
created two frames -- frameless and tech. frameless is used when there
is 0 or 1 blocks, otherwise tech is used.
2024-06-18 23:44:53 -07:00
Evan Simkowitz
9ff8cb0292
add new test for placeholder noop 2024-06-18 16:06:19 -07:00
Evan Simkowitz
a3a576bd6d
Don't show the placeholder if the action will be a no-op (#58)
Update the computeMove function to only set pendingAction if the action
is not a no-op (i.e. it will not place the node adjacent to itself at
the same level). Also clears the pendingAction if the user hovers over
the node that is being dragged.
2024-06-18 16:03:00 -07:00
Evan Simkowitz
bd93504314
Add comments for swapNode 2024-06-17 14:18:27 -07:00
Evan Simkowitz
48d4611a05
Add Swap Node functionality (#56)
Adds the ability to swap nodes by dragging to the center of a tile.

Also fixes a bug where moving a node to a new lesser index under the
same parent would produce a no-op.
2024-06-17 14:14:09 -07:00
Evan Simkowitz
0b80dbcb72
Fix preview rendering in TileLayout storybook 2024-06-13 23:08:11 -07:00
Evan Simkowitz
1f9dada759
Rename LeafNode to DisplayNode 2024-06-13 19:36:06 -07:00
Evan Simkowitz
ca0b875ac9
Adding more verbose docstrings for the TileLayout (#51) 2024-06-13 19:33:06 -07:00
Mike Sawka
1874d9a252
port to electron (#33) 2024-06-11 17:42:10 -07:00
Evan Simkowitz
9f32a53485
Fix preview getting unset when app is idle (#43)
I found that the drag preview images would get unset when the app went idle. I am now caching the preview image and resetting it every time a user hovers over a TileNode. I am also updating the logic for the placeholder slightly to reduce the number of variables floating around.
2024-06-11 16:28:41 -07:00
Evan Simkowitz
8b61c4d62b
Add webkit-prefixed user-select attributes (#41)
It turns out that WebKit uses its own prefix for user-select so I'm adding this everywhere we currently define user-select, as well as a few new places
2024-06-11 16:16:52 -07:00
Evan Simkowitz
9809414eb0
Fix order of operations when moving nodes (#40)
Insert the node at the new location before removing it from its old location. With the old order, removing a node from its parent could change the indexing of the parent node, if moving a node to a new location under the same parent.
2024-06-11 15:10:20 -07:00
Evan Simkowitz
cff7a54507
Ensure previews don't wrap text (#39) 2024-06-11 14:51:35 -07:00
Evan Simkowitz
4293c749c4
Only generate a preview image on first onPointerEnter event (#37)
This resolves a noticeable delay when the first paint required generating multiple preview images
2024-06-11 14:28:17 -07:00
Evan Simkowitz
1be376c679
Remove debugging statement when generating drag previews (#36) 2024-06-11 13:25:21 -07:00
Evan Simkowitz
0a45311f30
Implement outer drop direction, add rudimentary drag preview image rendering (#29)
This PR adds support for Outer variants of each DropDirection.

When calculating the drop direction, the cursor position is calculated
relevant to the box over which it is hovering. The following diagram
shows how drop directions are calculated. The colored in center is
currently not supported, it is assigned to the top, bottom, left, right
direction for now, though it will ultimately be its own distinct
direction.

![IMG_3505](https://github.com/wavetermdev/thenextwave/assets/16651283/a7ea7387-b95d-4831-9e29-d3225b824c97)

When an outer drop direction is provided for a move operation, if the
reference node flexes in the same axis as the drop direction, the new
node will be inserted at the same level as the parent of the reference
node. If the reference node flexes in a different direction or the
reference node does not have a grandparent, the operation will fall back
to its non-Outer variant.

This also removes some chatty debug statements, adds a blur to the
currently-dragging node to indicate that it cannot be dropped onto, and
simplifies the deriving of the layout state atom from the tab atom so
there's no longer another intermediate derived atom for the layout node.

This also adds rudimentary support for rendering custom preview images
for any tile being dragged. Right now, this is a simple block containing
the block ID, but this can be anything. This resolves an issue where
letting React-DnD generate its own previews could take up to a half
second, and would block dragging until complete. For Monaco, this was
outright failing.

It also fixes an issue where the tile layout could animate on first
paint. Now, I use React Suspense to prevent the layout from displaying
until all the children have loaded.
2024-06-11 13:03:41 -07:00
Evan Simkowitz
45a9a95e38
Fix nodeRefs dependency, since map is not a reliable dependency (#31) 2024-06-10 15:16:29 -07:00
Evan Simkowitz
57e5b7284f
Forgot to set generation atom (#28) 2024-06-06 18:07:00 -07:00
Evan Simkowitz
86109daeed
Record a generation when the layout node gets updated to optimize backend calls (#27) 2024-06-06 18:04:54 -07:00
Evan Simkowitz
441463b172
Add placeholder for layout drag and drop (#26) 2024-06-06 17:58:37 -07:00
Evan Simkowitz
2866862253
Replace lots of separate ResizeObservers with a single one via useResizeObserver (#24) 2024-06-06 14:57:37 -07:00
Evan Simkowitz
b3b99402b8
Fix undefined error when unmounting resize observer (#23) 2024-06-06 11:27:33 -07:00
Evan Simkowitz
1bc4e0c594
Use resize observer to detect when the webview gets zoomed (#22)
I noticed that the display nodes weren't getting updated when the browser zoom level changed. I found that using ResizeObserver was a better mechanism to capture this signal.
2024-06-06 11:18:05 -07:00
Evan Simkowitz
f12e246c15
Break layout node into its own Wave Object (#21)
I am updating the layout node setup to write to its own wave object. 

The existing setup requires me to plumb the layout updates through every
time the tab gets updated, which produces a lot of annoying and
unintuitive design patterns. With this new setup, the tab object doesn't
get written to when the layout changes, only the layout object will get
written to. This prevents collisions when both the tab object and the
layout node object are getting updated, such as when a new block is
added or deleted.
2024-06-05 17:21:40 -07:00
Evan Simkowitz
28cef5f22f
Add ready param to determine when to render content (#19) 2024-06-05 11:56:04 -07:00
sawka
cf85ad0980 debounce resize handler, fix useEffect() in term.tsx 2024-06-04 23:47:18 -07:00
Evan Simkowitz
29e209e0b0
Make layouts flow horizontally by default (#18) 2024-06-04 16:35:32 -07:00
Evan Simkowitz
c3e71c5c7d
Integrate Faraday layout system (#16)
Co-authored-by: Mike Sawka <sawka@users.noreply.github.com>
Co-authored-by: sawka <mike.sawka@gmail.com>
2024-06-04 13:05:44 -07:00