Repository navigation
Page anatomy, index pages, and show and edit pages - #386
Merged
Merged
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ion-row Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…er-account Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s menu partials Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…king tables Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… and stacking tables Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ts and stacking tables Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…tables Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ables Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… stacking tables Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…d stacking tables Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… decisions Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…n account_numbers Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Every button in the app looks like the main action, so a page cannot show which action is the default. Each template decides where its actions go: the title bar, a paragraph above the content, a card, a footer or a
div.actions. Delete sits on show pages, in index table rows, and in footers outside the form on edit pages. Deleting a person or a group asks for no confirmation at all. Several pages (accounts, categories, chattels, transactions, transaction links, todos, the dashboard) have noh1. Index rows carry action columns and database IDs instead of opening the record. Wide tables push the page sideways, beside the sidebar and on a phone.UI-review slices 3 (page anatomy), 4 (index pages) and 5 (show and edit pages) ship together. The review is the artifact https://claude.ai/artifact/Btg62aW6itkPG4pZJiKFe6. The app runs on mvpa.css with PR #41 and follows the rails-ui reference
interaction-design.mdon dotfiles main (agents/.agents/skills/rails-ui/references/interaction-design.md). That reference is the specification; this intent does not repeat it.h1in a shared title bar. Every form ends in a shared action row. An "Acties ▾" pull-down menu holds a show page's secondary commands. Form errors render as<aside role="alert">.data-label, and a table that does not fit stacks into labelled rows.<dl>. Delete lives only on the edit page: a redVerwijderen…apart on the far left of the action row, confirmed by the browser's native confirm.Proof
Verwijderen…far left, thenAnnulerenand a filledOpslaan,Opslaanrightmost →test/integration/accounts_edit_test.rbedit form ends in an action row of Verwijderen…, Annuleren and Opslaanandtest/system/action_row_test.rbVerwijderen… stands apart on the left and Opslaan is rightmostAnnulerenand a filledOpslaan, on the right →test/integration/accounts_edit_test.rbnew form ends in an action row of Annuleren and Opslaanandtest/system/action_row_test.rbnew page action row sits on the right without Verwijderen…test/system/action_row_test.rbpressing Return in the account name saves the accountAnnulerenon an edit page returns to the show page; on a new page to the index →test/integration/accounts_edit_test.rbAnnuleren on the edit page links to the accountandAnnuleren on the new page links to the accounts indexVerwijderen…on a person's edit page shows the browser's confirm naming the person and that it cannot be undone; cancelling keeps, confirming deletes →test/system/people_test.rbdismissing the delete confirm keeps the personandaccepting the delete confirm deletes the persontest/integration/accounts_show_test.rbshow page has no delete button,test/integration/categories_show_test.rbshow page has no delete button,test/integration/chattels_show_test.rbshow page has no delete button,test/integration/people_test.rbshow page has no delete button,test/integration/groups_test.rbshow page has no delete buttontest/integration/accounts_index_test.rbrows carry no buttons and the name links to the account,test/integration/admin/users_test.rbindex rows carry no buttons and the name links to the user,test/integration/appropriations_test.rbindex rows carry no buttons and the purpose links to the appropriation,test/integration/budgets_test.rbindex rows carry no buttons and the date range links to the budget+ Nieuwin its title bar and shows no database IDs →test/integration/index_pages_test.rbevery index with a new route has + Nieuw in its title barandno index shows a database ID columnh1→test/integration/page_headings_test.rbevery page has exactly one h1 in its title barNieuw bezitsits in the "Acties" menu next toBewerken→test/integration/transactions_show_test.rbNieuw bezit sits in the Acties menu beside Bewerkentest/integration/accounts_edit_test.rba rejected save shows the errors in an alert above the fields,test/integration/people_test.rbsaving a person without a name shows the error in an alert, plus one manual VoiceOver or accessibility-tree check after a rejected save, recorded in the pull requesttest/integration/chattels_show_test.rbshow page lists the fields as a description listtest/integration/people_test.rba refused delete returns to the edit page with the reason, and the same test inaccounts_edit_test.rb,groups_test.rb,appropriations_test.rbtest/integration/users_index_test.rbrows carry no remove buttonandtest/system/admin_users_test.rban administrator deletes a user from the edit page after the confirmtest/system/responsive_tables_test.rbtransactions table fits beside the sidebar at laptop widthtest/system/responsive_tables_test.rbtransactions table stacks into labelled rows at phone width(computeddisplay,::beforecontent, header clipped notdisplay: none, roles), plus one manual VoiceOver or accessibility-tree check recorded in the pull requesttest/integration/index_pages_test.rbevery index table stacks with a data-label on every cellandtest/system/responsive_tables_test.rbno index page, show page or the dashboard scrolls sideways at phone widthAnnulerenlooks like a bordered button beside a filledOpslaan→test/system/action_row_test.rbAnnuleren has a border and a different background from Opslaan. The test asserts<a role="button" class="button-secondary">with the plain-button look of atype="button"Manual checks
Headless Edge on a copy of the development data, at 1280×900 and at 390×844 (phone width, through device emulation). The accessibility tree (CDP
Accessibility.getFullAXTree) stands in for VoiceOver.Verwijderen…(red) far left,Annuleren(an<a role="button">, light) and a filledOpslaanon the right,Opslaanrightmost. On a phone the row stacks withOpslaanon top. The number fieldset sits inside the form, above the action row.Verwijderen…: the native confirm reads"<name>" verwijderen? Dit kan niet ongedaan worden gemaakt.Dismissing it keeps the person.<aside role="alert">is the first visible child of the form. Its accessibility role isalertwithlive=assertive, and it is in the DOM atturbo:render, so a screen reader announces it. The delete confirm on that refused page names the stored name, not the unsaved one.tablenamed "Transacties" with 8columnheaders andcells; the::beforelabels do not leak into the cell names.h1and no sideways scroll at 1280 and at 390. The account merge page from One external account can hold several account numbers #385 uses the shared title bar.Notes
<html>has nolangattribute; the title-bar heading wrap rule (local/layout/title_bar.css) could move into mvpa.css.🤖 Generated with Claude Code