Files
paseo/packages/app
Mohamed Boudra 6e5742fbc6 Rename sidebar workspaces in place on wide web layouts (#9280)
* feat(app): rename sidebar workspaces in place on wide web layouts

At lg and up on web, Rename from a sidebar row's kebab or context menu turns
the title into an input instead of opening the modal. The input fills a box
exactly one title line tall and its focus outline paints outside that box, so
the row never moves. Enter or blur saves, Escape discards. Narrower and native
layouts keep the modal; the native-wide device flows drive it.

The field stays on screen, read-only, holding the submitted title until the
renamed workspace arrives. The daemon answers workspace.title.set before it
pushes the workspace update, and queues that update behind any in-flight ones
for the workspace, so closing on the answer would show the old title.

While editing, the row detaches its press, drag and context-menu handlers
rather than becoming disabled: a disabled row sets aria-disabled, which makes
the input inside it read as disabled. A ContextMenuTrigger with its menu off
now leaves the browser's own menu alone, so copy and paste work in the field.

The rename modal moves into the new workspace-rename module, and the unused
sidebar-workspace-row.tsx is removed.

* fix(app): keep a title renamed elsewhere when an untouched inline rename closes

The unchanged check compared the field's text against the workspace's live title, while the
field keeps the text it opened with. A rename from another client during an untouched edit
made closing the field send the old title back. The inline session now owns its starting
text for both the field and the unchanged check.

* fix(app): hold a saved inline title against the title it replaced

The field closed once the row's title moved off the one editing started from. When another
client renamed the workspace while the field was open, that title had already moved, so a
save closed the field on the daemon's answer and showed the other client's title until the
saved one arrived. The session now records the title at submit and waits for it to change.

* fix(app): close an inline rename that submits the row's current title

Saving the title another client had just set left the row's title where it was, so the
saved phase waited forever with the field read-only and the row's press and menu handlers
off. A submit matching the current title now closes without a request.

* fix(app): finish an inline rename when the row shows the accepted title

The saved phase treated any title change as confirmation of this save. A rename from
another client delivered before ours closed the field early and showed that title, and
saving a title the row already had never changed it, leaving the field read-only and the
row's handlers off. The daemon's response carries the accepted title; the field now closes
once the row shows it. That rule also covers a submit matching the current title, so the
special-case comparison for it is gone.

* fix(app): close an inline rename that a later rename supersedes

The daemon builds each workspace update from its latest record, so a rename committed after
ours was accepted can be published in its place and ours never appears. Waiting for the
accepted title then left the field read-only and the row's handlers off. The saved phase now
ends on the first title change the row renders after the answer, or on the accepted title
if it is already showing. The session tracks the row's title while saving so a rename
delivered before the answer does not count.
2026-11-11 10:36:27 +07:00
..
2026-06-09 10:00:33 +07:00
2026-10-17 20:07:37 +02:00
2025-11-24 22:31:41 +01:00

Welcome to your Expo app 👋

This is an Expo project created with create-expo-app.

Get started

  1. Install dependencies

    npm install
    
  2. Start the app

    npx expo start
    

In the output, you'll find options to open the app in a

You can start developing by editing the files inside the app directory. This project uses file-based routing.

Get a fresh project

When you're ready, run:

npm run reset-project

This command will move the starter code to the app-example directory and create a blank app directory where you can start developing.

Learn more

To learn more about developing your project with Expo, look at the following resources:

Join the community

Join our community of developers creating universal apps.

Dictation debugging

Set EXPO_PUBLIC_ENABLE_AUDIO_DEBUG=1 before running npx expo start to render the in-app audio debug card. Pair it with the server-side STT_DEBUG_AUDIO_DIR flag so every dictation includes a copyable path to the saved raw audio file.