Commit Graph

63 Commits

Author SHA1 Message Date
Evan Simkowitz
edfe711eda
Use Window Controls Overlay API for native-like experience on Windows and Linux (#240)
This PR implements the [Window Controls Overlay
API](https://web.dev/articles/window-controls-overlay) to let us hide
the menu bar on Windows and Linux and directly embed the window controls
in our tab bar. With #239 merged, we no longer need the menu bar on
these platforms.

The overlaid window controls are transparent so they will take on the
background from the app. I've updated the tab bar to flow properly using
the API's CSS environment variables.

At some point, we may want to update the logic around the symbolColor so
that it can ensure a proper contrast between the background and the
symbols in the window controls. For now, setting them to white works for
all the backgrounds we currently support.

![image
(2)](https://github.com/user-attachments/assets/7610f10b-9696-435c-9a2d-a435bee9fadb)


https://github.com/user-attachments/assets/8d19b512-5281-42b9-8abb-ccb9b850061f
2024-08-16 23:45:22 -07:00
Evan Simkowitz
4a782f2747
make app menu button cursor a pointer and add a hover text color 2024-08-16 23:41:31 -07:00
Evan Simkowitz
03587184a0
Replace logo with platform-dependent button to open app menu (#239)
Replace the logo in the tab bar with an ellipsis icon that shows on
Linux and Windows and, when clicked, opens up the system menus. This
also fixes an issue I noticed where the context menus were set to the
wrong coordinates when a window was zoomed in.


![image](https://github.com/user-attachments/assets/1be77cad-73a6-4cb8-b545-08ec908f1d9a)

![image](https://github.com/user-attachments/assets/0beef938-15f8-4084-b7bd-7d9f995187ef)
2024-08-16 16:18:42 -07:00
Evan Simkowitz
e85b0d205e
New layout model (#210)
This PR is a large refactoring of the layout code to move as much of the
layout state logic as possible into a unified model class, with atoms
and derived atoms to notify the display logic of changes. It also fixes
some latent bugs in the node resize code, significantly speeds up
response times for resizing and dragging, and sets us up to fully
replace the React-DnD library in the future.
2024-08-14 18:40:41 -07:00
sawka
5e1da4805f move widgets to left, fix some paddings 2024-08-09 11:49:19 -07:00
Evan Simkowitz
8d29f7f934
Import logo png so Vite can find it (#203) 2024-08-06 17:12:32 -07:00
Evan Simkowitz
8ebdb58f4b
Use button for update available banner (#202) 2024-08-06 16:48:25 -07:00
sawka
8508a40261 try adding the wave logo to header 2024-08-06 16:41:00 -07:00
Evan Simkowitz
824a8540ff
Add banner for app updates, clean up updater logic (#200)
This improves the app updater so that it doesn't rely on unreliable
system notifications. Now, a banner in the tab bar will display when an
update is available. Clicking this will prompt the user to restart the
app and complete the installation.

This also updates the tab bar to move to the smaller tab size earlier so
we don't need to make the tab bar scrollable as much.


![image](https://github.com/user-attachments/assets/79e24617-d609-4554-bdb2-979f810a9b66)
2024-08-06 11:05:26 -07:00
sawka
94d6c14011 reorganize block view more 2024-08-01 15:35:13 -07:00
sawka
c8cc1de2d4 add 'dev' label to application. also add 'un-magnify' icon when magnified 2024-08-01 13:46:06 -07:00
Red J Adaya
1841669525
tab animations (#167)
Implements animations when adding and removing tabs.
2024-07-31 12:54:43 -07:00
Evan Simkowitz
2157df85de
Disable block pointer events during layout drag (#183)
This will ensure that the webview cannot capture the pointer events and
disrupt the drag functionality.

This also fixes an issue where greedy and imprecise bounds calculations
could result in thrashing of the layoutState.pendingAction field, which
could cause the placeholder to flicker.

This also fixes issues where some React Effects that were supposed to be
debounced or throttled were being invoked too much. This is because
useEffect regenerates the callback when it is run, resulting in the
debounce or throttle never taking effect. Moving the throttled or
debounced logic to a separate callback solves this.
2024-07-31 12:49:38 -07:00
sawka
8456c57bc1 implement bg presets 2024-07-30 23:22:41 -07:00
sawka
f7531b895f allow ten characters, also count glyphs not chars 2024-07-30 22:22:21 -07:00
sawka
fe708d1d37 small updates to tab colors 2024-07-30 15:43:49 -07:00
Evan Simkowitz
f475c7432f
Make close button always show on hover, even for inactive tabs (#178) 2024-07-30 15:06:02 -07:00
Evan Simkowitz
e6dc6c561e
Fix clipping in the tab layouts by swapping margins for padding (#177)
<img width="132" alt="image"
src="https://github.com/user-attachments/assets/3550f307-fc8d-4dd8-b9d8-3e2e8d9ad395">
2024-07-30 14:06:09 -07:00
Red J Adaya
9233b3dbd7
modals component and model and TOS modal (#164)
Co-authored-by: Sylvia Crowe <software@oneirocosm.com>
Co-authored-by: sawka <mike.sawka@gmail.com>
2024-07-30 11:44:19 -07:00
Evan Simkowitz
f3f272a47b
Add action for magnifying a block (#172)
Adds the implementation for the "Magnify Block" context menu item. This
will pop a block out of the layout and bring it to the foreground.

This also cleans up some block styling to make radii more consistent.

<img width="814" alt="image"
src="https://github.com/user-attachments/assets/c81521e1-c91f-4bb5-9eec-ff0eda178268">
2024-07-30 10:59:53 -07:00
Mike Sawka
551802dbd7
background support (from metadata). colors, gradients, images. (#168) 2024-07-29 11:55:10 -07:00
Red J Adaya
96420ea3ef
code editor responsiveness and various fixes (#129) 2024-07-25 12:00:35 -07:00
Evan Simkowitz
9fb2e58b54
rename faraday to layout (#147) 2024-07-23 13:50:23 -07:00
Evan Simkowitz
0fbb42863c
Remove left indent for tab-bar for non-Mac targets and when in full screen (#128)
This adds a new global atom to track whether a window is in full screen.
It also updates the behavior of the tab bar so that it will only add an
extra left indent on macOS windows that are not in full screen.
Otherwise, the indent will be much smaller.
2024-07-22 13:33:10 -07:00
Evan Simkowitz
8971e2feba
Set up electron-builder for new app (#113)
Adds electron-builder, which we will use to package and distribute our
application, same as in the existing app.
Replaces explicit port assignments with dynamic ones, which are then
stored into environment variables.
Adds a ~/.w2-dev folder for use when running a dev build.

The build-helper pipeline from the old repo is included here too, but it
is not updated yet so it will fail.

Also removes some redundant utility functions and cleans up some let vs.
const usage.

The packaging can be run using the `package:prod` and `package:dev`
tasks.

---------

Co-authored-by: sawka <mike.sawka@gmail.com>
2024-07-17 18:42:49 -07:00
Jarek Ceborski
e012cc16e6 Added window transparency ans styles 2024-07-12 21:12:34 +02:00
Red J Adaya
6d6102b912
fix blocks blurry border (#104) 2024-07-08 22:31:38 -07:00
Mike Sawka
848a9af9a0
dynamic header updates (#102) 2024-07-08 15:04:48 -07:00
Red J Adaya
0cb9b8940b
new tabs design 2 (#100) 2024-07-08 15:02:52 -07:00
Red J Adaya
1d83062507
new tabs design (#99) 2024-07-05 19:54:28 -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
Mike Sawka
4f627a0342
react.memo (#79) 2024-06-26 09:31:43 -07:00
sawka
bd2bb5293f enable copy/paste via Cmd:Shift:C and Cmd:Shift:V in the terminal 2024-06-24 17:58:40 -07:00
sawka
b2e12e4171 reimplement closetab context menu 2024-06-24 17:50:06 -07:00
Red J Adaya
4714b88be7
Move tab bar to top edge (#72) 2024-06-23 12:03:09 -07:00
sawka
8683105f70 fun customization for the block title 2024-06-21 14:44:11 -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
Red J Adaya
9cc5d9d3ae
Add ability to edit tab name (#67) 2024-06-21 10:23:04 -07:00
Evan Simkowitz
2c6f6d917f
Fix greedy rendering of drag preview (#68) 2024-06-21 10:18:35 -07:00
Red J Adaya
b8b03ea817
Scrollable tab bar fixes (#69) 2024-06-21 10:18:13 -07:00
Red J Adaya
e83b5c8763
Scrollable tabs using OverlayScrollbars (#60) 2024-06-20 20:04:00 -07:00
sawka
c7f76d5ced implement drag handles 2024-06-19 23:00:57 -07:00
Mike Sawka
fb668fd4e5
multi-window support (#62) 2024-06-19 19:10:53 -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
Red J Adaya
b6c85e38f6
DnD tabs (#44) 2024-06-17 21:50:33 -07:00
Mike Sawka
1874d9a252
port to electron (#33) 2024-06-11 17:42:10 -07:00
Evan Simkowitz
1b52160794
Remove unnecessary generic definition (#42) 2024-06-11 16:19:17 -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
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