Skip to content

Layout editor: quick fixes, several controls at once, context menu, Changes tab, undo with selection, faster edits - #7

Merged
oblomov-dev merged 5 commits into
mainfrom
claude/peaceful-mccarthy-dbtxpp
Oct 17, 2026
Merged

oblomov-dev merged 5 commits into
mainfrom
claude/peaceful-mccarthy-dbtxpp

Conversation

@oblomov-dev

@oblomov-dev oblomov-dev commented Oct 17, 2026 •

Copy link
Copy Markdown
Member

Four rounds of usability, performance and structure work on the editor. The generator is unchanged; the class only follows the order of the attributes, which can now be changed.

Round 1 - working aids

  • Undo / redo bring back the control that was selected when the step was taken.
  • Checks: a click on a line selects the control and focuses the property it is about. Where there is one fix, a button does it: create the attribute a binding names, remove an unused attribute, reset a value UI5 would refuse, build the template of a bound list, create a tree's nodes table, bind an input to a new attribute. The fixes are data on the issue (fix: { kind, … }), applied in src/ui/data.js.
  • Several controls at once: Ctrl/Shift+click on the canvas, in the outline or in the code. Delete, duplicate, move, copy and cut act on all of them; Wrap in… puts controls side by side into a new VBox, HBox, FlexBox or Panel (wrapNodes in src/model.js).
  • Keys: Ctrl+↑/↓ move the selection; the drawer tabs go by arrow key, Home and End. Modified arrow keys in the outline no longer also walk the tree.
  • Outline filter by type or text, with the way down to each match.
  • Properties show the default of the canvas's UI5 (asked from the runtime per control class, not from test/ui5-1.71.json); event fields offer the event names the design raises already.
  • Data: attributes and fields move up and down; Paste rows… takes sample rows from a spreadsheet (TSV) or CSV (parseSampleRows).
  • Preview mode lists the events raised, with what the user had changed in the model by then.
  • Designs in this browser: Save in browser keeps designs under their class name, listed next to Recent.
  • The editor's own dialogs (choose( ) in src/ui/dom.js) replace every confirm( ); errors stay until closed; a share link over 8 kB says so.

Round 1 - performance and structure

  • The outline, the data tab, the list of the checks and the class render only while on screen.
  • A commit serializes the design once; typing writes localStorage debounced, flushed on pagehide.
  • One implementation of the edits on the selection, src/ui/actions.js, for keys, command palette, canvas toolbar and context menu.

Round 2

  • Context menu for a control on the canvas, in the outline and by Shift+F10 (src/ui/context.js).
  • Selected rows of the outline drag together (moveNodes in src/model.js).
  • Copy / Paste properties from one control onto the selected others that have them.
  • Recently used controls first in the Controls panel.
  • Empty containers get room and a dashed frame on the canvas in Edit mode.
  • The browser refusing to keep the design is said once; another tab saving over the design is announced, with a button to load it.

Round 3

  • Changes tab for a class that was opened: what the export changes in it, line by line (src/diff.js).
  • Double-click on the canvas edits a control's text in place (src/ui/inline.js).
  • Light / dark / as the system for the editor itself.
  • Fixes from a review of rounds 1 and 2 (outline focus with several selected, failed wrap message, template fix offer, filter + arrow keys, defaults while loading, context menu keys).

Round 4

  • Zoom of the canvas, 75% and 50%; device widths keep the width the view gets, and coordinates from the frame are mapped to the page (frameToPage).
  • ? lists every keyboard shortcut; typeahead in the outline; Enter in the control search inserts the first match, the arrows walk the list.
  • The command palette ranks what starts with the words first.
  • The outline marks controls that raise an event (⚡); Copy above the code copies what the tab shows.
  • Fixes from a review of round 3: empty parts (tabs, page headers, cards) keep their room on the canvas; Escape on the canvas field undoes only its own edit; the template fix is withheld only for a table with its own columns; the canvas field closes on scroll and resize and opens over the row that was double-clicked; the Changes tab names a newline added at the end; dark mode has its own success/error/warning colours.

README and AGENTS.md are updated.

Checks

  • npm test: 388 passed
  • npm run check:abap: 23 files, 0 failing
  • npm run verify:abap: all 23 classes, 7.40 and 7.02
  • npm run test:e2e:local: 84 passed on UI5 1.144 and 1.71 (new: test/e2e/workflow.spec.mjs, 29 tests)

🤖 Generated with Claude Code

https://claude.ai/code/session_017kNeryZR99nVMy4Q21eYXA

…tion, faster edits

Working aids:
- Undo and redo bring back the control that was selected
- Checks: a click focuses the property a line is about; a button fixes
  what has one fix (create the attribute a binding names, remove an
  unused one, reset a refused value, build a list's template, create a
  tree's nodes table, bind an input to a new attribute)
- Several controls at once: Ctrl/Shift+click on canvas, outline or code;
  delete, duplicate, move, copy, cut and "Wrap in" VBox/HBox/FlexBox/Panel
- Ctrl+Up/Down move the selection; arrow keys on the drawer tabs
- Outline filter by type or text
- Properties show the defaults of the canvas's UI5; event fields offer
  the event names the design raises already
- Data: attributes and fields move up and down; "Paste rows" takes rows
  from a spreadsheet or CSV
- Preview mode lists the events raised and the model changes by then
- Designs saved in this browser under their class name, next to Recent
- The editor's own dialogs instead of confirm( ); errors stay until closed;
  a share link over 8 kB says so

Performance and structure:
- The outline, data, checks list and class render only while on screen
- A commit serializes the design once, typing writes the store debounced
- One implementation of the edits on the selection (src/ui/actions.js)
  for keys, command palette and canvas toolbar

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017kNeryZR99nVMy4Q21eYXA
…ter, empty containers with room

- A context menu for a control on the canvas, in the outline and by
  Shift+F10: move, copy, cut, paste, duplicate, wrap, delete, copy and
  paste properties - the edits of src/ui/actions.js
- Selected rows of the outline drag together (moveNodes in src/model.js)
- Copy properties / Paste properties set the properties of one control
  on the selected others that have them
- Controls inserted last come first in the Controls panel
- An empty container gets room and a dashed frame on the canvas in Edit
  mode, so there is something to drop into
- The browser refusing to keep the design is said once; another tab of
  the editor saving over the design is announced, with a button to load it

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017kNeryZR99nVMy4Q21eYXA
@oblomov-dev oblomov-dev changed the title Layout editor: quick fixes, several controls at once, undo with selection, faster edits Layout editor: quick fixes, several controls at once, context menu, undo with selection, faster edits Oct 17, 2026
…nvas, light/dark editor

- Changes: what the export changes in a class that was opened, line by
  line with context (src/diff.js)
- A double-click on a control on the canvas edits its text there; Enter
  keeps it, Escape takes it back (src/ui/inline.js)
- The editor's appearance: as the system, light or dark, kept in the
  preferences; the canvas keeps its UI5 theme

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017kNeryZR99nVMy4Q21eYXA
- Outline: the row of the control the properties show is the one kept in
  view and focused, not the first selected row
- A wrap that fails no longer reports success
- Build a template is offered only where it replaces no columns built by
  hand and has a table to build from
- Under the outline filter the arrow keys walk, they do not collapse
- The defaults of a control type reach every control of it selected while
  they load, and a canvas reload drops the questions of the old one
- Only layouts and lists get room as empty containers on the canvas
- Keys pressed in the context menu stay in it

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017kNeryZR99nVMy4Q21eYXA
@oblomov-dev oblomov-dev changed the title Layout editor: quick fixes, several controls at once, context menu, undo with selection, faster edits Layout editor: quick fixes, several controls at once, context menu, Changes tab, undo with selection, faster edits Oct 17, 2026
…second review

- The canvas zooms out to 75% or 50%; a device width stays the width the
  view gets, and what the frame reports lands where it is on screen
- ? lists every keyboard shortcut (also in the command palette)
- A letter in the outline jumps to the next control of that name; Enter
  in the control search inserts the first match, the arrows walk the list
- The command palette puts what starts with the words first
- The outline marks controls that raise an event; Copy above the code
  copies what the tab shows (the class, the view, or the changes)

Fixes:
- Empty parts (a tab, a page header, a card) keep their room on the
  canvas; only controls whose children are values go without
- Escape on the canvas field takes back only an edit it made
- Build a template is withheld only for a table with its own columns
- The canvas field closes when the canvas scrolls or the window resizes,
  and opens over the row that was double-clicked, on its whole control
- The Changes tab says when only the newline at the end of the file changes
- Dark mode has its own colours for success, error and warning

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017kNeryZR99nVMy4Q21eYXA
@oblomov-dev
oblomov-dev merged commit 19d9651 into main Oct 17, 2026
2 checks passed
@oblomov-dev
oblomov-dev deleted the claude/peaceful-mccarthy-dbtxpp branch October 17, 2026 12:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants